Linux
讓 cron 檢查 bash 腳本是否正在執行
我有一個 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 the
Restart=alwayskey, 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 作業來執行任何必要的檢查和修復,而不是執行持久性腳本。您將被限制為每分鐘檢查一次,但如果該頻率可以接受,它可能是一個更簡單的解決方案。