Debian
Systemd 到 ExecStart 總是執行?
致力於創建 systemD 服務以從遠端 SSH 伺服器檢索密鑰文件,然後使用它在伺服器(而不是根驅動器)上自動掛載加密的 Luks 磁碟。
[Unit] Description=Open encrypted data volume After=network-online.target Wants=network-online.target StopWhenUnneeded=true [Service] Type=oneshot ExecStart=/bin/sh -c '/etc/luks/key.sh | /sbin/cryptsetup -d - -v luksOpen /dev/disk/by-uuid/13b051b5-7f4f-4030-92da-d59f12422f40 Data_Crypt' RemainAfterExit=true ExecStop=/sbin/cryptsetup -d - -v luksClose Data_Crypt
這似乎可以正常工作,但是每次我執行
systemctl start unlock-data.service
我檢查了 systemd 日誌,我可以看到它既解鎖了驅動器,又鎖定了它。ExectStart 和 ExecStop 都在觸發。如果我從其中完全刪除 ExecStop 行並再次執行“systemctl start”,它將完全按預期解鎖驅動器。
我也嘗試將類型更改為“簡單”,但這也不起作用。我相信 oneshot 對我正在做的事情是正確的。
這是在 Debian 11.3 上。今天全新安裝。
為什麼每次啟動時 ExecStop 都會觸發?
該行為很可能是由於
StopWhenUnneeded=true
單位部分中的設置。根據手冊頁,不需要的定義是這樣的:
StopWhenUnneeded=
接受一個布爾參數。如果為 true,則不再使用該單位時將停止。請注意,為了最小化要執行的工作,systemd 預設不會停止單元,除非它們與其他單元沖突,或者使用者明確要求關閉它們。如果設置了此選項,則如果沒有其他活動單元需要它,則會自動清理一個單元。預設為假。
由於沒有其他單元依賴於這個自定義單元,systemd 會在它啟動時立即停止它。