Shell-Script

測試服務是否在腳本中執行的“正確”方法

  • September 10, 2021

我的問題:

我正在編寫一個 bash 腳本,我想在其中檢查給定的服務是否正在執行。

我知道如何手動執行此操作,使用$ service [service_name] status.

但是(尤其是自從遷移到 systemd 之後)列印出一大堆文本,解析起來有點混亂。我假設有一個為具有簡單輸出或我可以檢查的返回值的腳本製作的命令。

但是Google搜尋只會產生大量“哦,只是ps aux | grep -v grep | grep [service_name]”的結果。這不可能是最佳實踐,不是嗎?如果該命令的另一個實例正在執行,但不是由 SysV 初始化腳本啟動,該怎麼辦?

還是我應該閉嘴,用一點 pgrep 弄髒我的手?

systemctl有一個is-active子命令:

systemctl is-active --quiet service

如果處於活動狀態,將退出狀態為零service,否則為非零,使其成為腳本的理想選擇:

systemctl is-active --quiet service && echo Service is running

如果您省略--quiet它,它也會將目前狀態輸出到其標準輸出。

正如don_crissti所指出的那樣,即使沒有執行以提供服務,某些單元也可以處於活動狀態:如果它們成功退出,則標記為“RemainAfterExit”的單元被認為是活動的,其想法是它們提供不需要守護程序的服務(例如,他們配置系統的某些方面)。然而,涉及守護程序的單元只有在守護程序仍在執行時才會處於活動狀態。

引用自:https://unix.stackexchange.com/questions/396630