Debian
獲取 systemd 實際狀態
我們如何知道 systemd 是否已完成引導系統?
如果系統由於缺少網路連接而實際上處於啟動過程中,我不想執行 cron 作業。我由 cron 啟動的腳本將在頂部進行測試,如果啟動過程沒有完成,它就會退出
#!/bin/sh $STATE=`HERE ADD THE MISSING PART` if [ $STATE != "active" ]; then exit fi # Actions to do on next cron after booting
如果它還可以為我提供有關關閉過程的資訊,因為問題可能是相同的..;
我在 SystemV 中使用執行級別命令執行此操作,但 Systemd 在引導結束時不會更改執行級別。
謝謝
您可以檢查您需要啟動的目標才能讓您的腳本執行。例如,為了使網路可以訪問,您需要檢查
network-online.target
(systemctl check
如果檢查的單元處於活動狀態,將返回 0)systemd 試圖到達的目標是它的“預設”目標,可以通過
systemctl get-default
. 如果該目標線上,則係統已完成引導(因此您可以發出systemctl status $(systemctl get-default)
檢查引導過程是否已完成)編輯: 如果您只想監視系統的目前狀態,並且您對目標不感興趣(即您只想在一切正常執行時執行您的命令),最好使用該
systemctl is-system-running
命令。它將輸出running
一切正常,或者degraded
係統啟動但某些服務失敗(可能表示或可能不表示錯誤)。其他狀態將表明您的腳本不應執行。作為旁注,通常最好檢查返回值而不是解析文本輸出,但是手冊頁沒有指定返回值,只說除了“執行”非零退出程式碼的結果之外的任何內容,所以它可能更安全解析輸出文本。
systemctl
有關可能的輸出值,請參見手冊頁。