我有一個程序作爲守護進程運行,使用C命令fork()。它創建一個在後臺運行的新實例。主要實例在那之後存在。如何編寫bash腳本以重新啓動服務?
什麼是檢查服務是否正在運行的最佳選擇?我正在考慮:
- 使用程序的進程ID創建一個文件,並檢查它是否正在使用腳本運行。
- 使用
ps | grep
在運行進程列表中查找程序。
謝謝。
我有一個程序作爲守護進程運行,使用C命令fork()。它創建一個在後臺運行的新實例。主要實例在那之後存在。如何編寫bash腳本以重新啓動服務?
什麼是檢查服務是否正在運行的最佳選擇?我正在考慮:
ps | grep
在運行進程列表中查找程序。謝謝。
我認爲用supervisord或其他過程控制系統來管理您的過程會更好。
創建每隔幾分鐘運行(或任何你舒服),並做了這樣的cron作業:使用任何您建議的方法
/path/to/is_script_stopped.sh && /path/to/script.sh
寫is_script_stopped.sh
。如果你的腳本被停止,cron會評估你的腳本,如果沒有,它不會。
爲了這個問題,你在標題中給:
這個簡單的無限循環將盡快重新啓動yourProgram因爲它失敗:
#!/bin/bash
for ((;;))
do
yourProgram
done
如果你的程序依賴的資源,這可能會失敗,從博的問題
#!/bin/bash
for ((;;))
do
yourProgram
sleep 1
done
:失敗的每秒百萬次時,它會是明智的,插入一個短暫的停頓,以避免,它將捕捉所有的系統資源dy您的帖子:
什麼是檢查服務是否正在運行的最佳選擇?
如果您ps
有C選項(如Linux的PS),你更希望在ps ax | grep
組合。
ps -C yourProgram
這似乎更像是一個問題要問http://superuser.com/或http://serverfault.com/也許... –
是很常見的守護進程將它們的PID寫入文件,如/var/run/syslog.pid。如果你的話,你的腳本可以使用它。 –