Debian

獲取 systemd 實際狀態

  • September 10, 2019

我們如何知道 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.targetsystemctl check如果檢查的單元處於活動狀態,將返回 0)

systemd 試圖到達的目標是它的“預設”目標,可以通過systemctl get-default. 如果該目標線上,則係統已完成引導(因此您可以發出systemctl status $(systemctl get-default)檢查引導過程是否已完成)

編輯: 如果您只想監視系統的目前狀態,並且您對目標不感興趣(即您只想在一切正常執行時執行您的命令),最好使用該systemctl is-system-running命令。它將輸出running一切正常,或者degraded係統啟動但某些服務失敗(可能表示或可能不表示錯誤)。其他狀態將表明您的腳本不應執行。作為旁注,通常最好檢查返回值而不是解析文本輸出,但是手冊頁沒有指定返回值,只說除了“執行”非零退出程式碼的結果之外的任何內容,所以它可能更安全解析輸出文本。

systemctl有關可能的輸出值,請參見手冊頁。

引用自:https://serverfault.com/questions/925580