如何讓 systemd 服務在等待使用者輸入時暫停啟動?

如何讓 systemd 服務在等待使用者輸入時暫停啟動?

讀取和睡眠(使用openvt -w)都被執行(read -p顯示訊息),但無法暫停啟動。

我嘗試了多種選項的組合/etc/systemd/system/<service>

Type=oneshot
TimeoutSec=5000
StandardInput=tty

用例僅在服務腳本停止運行後載入 GUI。我需要在 GUI 加載之前將 sshfs(還有多個用戶和主機名稱選項)安裝為 /home 並將“凍結”/home 作為本地分區(預設)。

答案1

「暫停啟動」並非完全適用於 systemd; systemd 並行運行多個服務。

但是,透過向服務新增“依賴項”,您基本上可以指定“啟動應暫停”並等待您的服務的時間點。

對於上面的用例,添加到/etc/systemd/system/<service>

[Unit]
Description=commands to run before GUI loads
Before=display-manager.service

這將迫使display-manager.service等待<service>。就我而言,<service>涉及使用者輸入(對於那些沒有獲得連接的讀者),有效地「暫停啟動」。

以下還有其他評論者表達懷疑的評論:

此類事情有一個用例 - 解鎖加密分割區。由於 systemd 中的錯誤 (bugs.freedesktop.org/show_bug.cgi?id=88483),無法在啟動期間使用開箱即用的 systemd 機制解鎖加密的多設備 Btrfs 陣列。您需要建立自己的 systemd 服務文件,經過數小時的嘗試,這個答案在我的服務文件中缺少了我需要的部分。謝謝阿格爾。

相關內容