2011-08-24 124 views
1

我有一個程序作爲守護進程運行,使用C命令fork()。它創建一個在後臺運行的新實例。主要實例在那之後存在。如何編寫bash腳本以重新啓動服務?

什麼是檢查服務是否正在運行的最佳選擇?我正在考慮:

  • 使用程序的進程ID創建一個文件,並檢查它是否正在使用腳本運行。
  • 使用ps | grep在運行進程列表中查找程序。

謝謝。

+0

這似乎更像是一個問題要問http://superuser.com/或http://serverfault.com/也許... –

+0

是很常見的守護進程將它們的PID寫入文件,如/var/run/syslog.pid。如果你的話,你的腳本可以使用它。 –

回答

1

我認爲用supervisord或其他過程控制系統來管理您的過程會更好。

0

創建每隔幾分鐘運行(或任何你舒服),並做了這樣的cron作業:使用任何您建議的方法

/path/to/is_script_stopped.sh && /path/to/script.sh 

is_script_stopped.sh。如果你的腳本被停止,cron會評估你的腳本,如果沒有,它不會。

0

爲了這個問題,你在標題中給:

這個簡單的無限循環將盡快重新啓動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