Linux

讓 cron 檢查 bash 腳本是否正在執行

  • August 11, 2015

我有一個 bash 腳本,使用者可以與它while do一起sleep不斷監控連接狀態並在出現問題時採取措施。唯一不受保護的是檢查腳本本身的執行。

我想myscript.sh通過 init.d 條目在啟動時執行,然後每分鐘執行一次 CRON 任務,以查看我在啟動時自動執行的腳本是否仍在執行。我怎樣才能做到這一點?

使用現代 init 系統(如 systemd 或 upstart),您可以讓 init 系統負責在腳本失敗時重新啟動腳本。

如果由於某種原因你被遺留系統卡住了,你可以讓腳本定期更新標誌文件(touch /var/lib/myapp/flagfile),然後通過 cron 檢查標誌文件是否超過一定的秒數,並在必要時重新啟動腳本. 就像是:

# get current time (in seconds since the epoch)
now=$(date +%s)

# get flag file mtime (in seconds since the epoch)
last_update=$(stat --printf '%Y' /var/lib/myapp/flagfile)

if [ $(( now - last_update )) -gt $interval ]; then
   restart_script_here
fi

使用系統

如果您有可用的 systemd,您只需創建一個.service. unit with theRestart=always key, which instructs systemd to restart the script whenever it fails. E.g., put something like this in/etc/systemd/system/myscript.service `:

[Unit]
Description=This is my nifty service.
# Put any dependencies here

[Service]
Type=simple
ExecStart=/path/to/myscript
Restart=always

[Install]
WantedBy=multi-user.target

然後使用以下命令啟動它:

# systemctl enable myscript
# systemctl start myscript

使用 cron

您可以只執行一個正常的 cron 作業來執行任何必要的檢查和修復,而不是執行持久性腳本。您將被限制為每分鐘檢查一次,但如果該頻率可以接受,它可能是一個更簡單的解決方案。

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