2015-03-31 38 views
0

我想重啓我的守護進程,如果它沒有運行(崩潰等)。由於各種原因,inittab不適用。pidof在cron中找不到進程?

*/1 * * * * /bin/bash if [ ! $(pidof vzlogger) ]; then sudo vzlogger -d; fi; 

是子shell「吃」的pidof退出代碼:因爲它使啓動多個進程這段代碼工作在bash不錯,但不是從cron?替代方案

*/1 * * * * /bin/bash if [ -z "$(pidof vzlogger)" ]; then sudo vzlogger -d; fi; 

有同樣的問題 - 多個進程?

+0

作爲答案概括,「工作在bash精」是不正確的。 – tripleee 2015-03-31 11:50:56

回答

0

運行Bash命令的方式不是bash commands,而是bash -c 'commands'

*/1 * * * * /bin/bash -c 'pidof vzlogger >/dev/null || sudo vzlogger -d' 

當然,/1是多餘的,你不需要猛砸任何這一點。

* * * * * pidof vzlogger >/dev/null || sudo vzlogger -d 

if test本身並不是不正確的,但它經常可以避免。因此,例如,pidof幸運的是,如果沒有找到PID,則返回錯誤,否則成功;所以你可以使用快捷鍵語法。 (因爲大多數正常維護的Unix工具都有這個功能。)由於PID不再被一個(多餘的)進程替代捕獲,所以我們將輸出從pidof重定向到/dev/null(否則每次成功時都會收到來自cron守護程序的電子郵件,生成輸出)。

/bin/bash if將在當前目錄(對於cron作業是您的主目錄)中搜索名爲if的文件,並嘗試將其作爲Bash腳本執行。

您應該已經收到一封電子郵件從一個錯誤消息cron守護程序:

bash: if: No such file or directory