2012-10-02 86 views
0

我有一個bash腳本,用於檢查我的PHP服務是否正在運行,並在需要時啓動它。使用crontab運行bash腳本時遇到問題

#!/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

KP=$(pgrep -P 1 -f script.php) 
if [ "X$KP" = "X" ] 
    then 
     /usr/bin/nohup php /var/www/test/script.php >>/var/www/test/log.txt 2>&1 & 
fi 

我加入下面進入crontab -e(如我的用戶)。

* * * * * /var/www/test/startup >> /var/www/test/cron.log 2>&1 & 

cron運行,我看到htop的過程。但是,它似乎沒有工作或寫入日誌。它只是坐在那裏使用0%的CPU。 /var/www/test/文件夾歸我所有,日誌文件擁有666權限。

出了什麼問題?或者說,我可以更改哪些錯誤日誌,以便我知道什麼是錯誤的?

+0

如果您從命令行手動運行代碼,它的工作原理是什麼? '/ usr/bin/nohup php /var/www/test/script.php >>/var/www/test/log.txt 2>&1& ' –

+0

@Crazy_Bash,輸出爲'[1] 1858'(該pid)並且該進程正在運行。它似乎也寫入了'log.txt'文件。 – Xeoncross

+0

它最多是權限問題,請嘗試向crontab添加sudo –

回答

0

我懷疑它與nohup有關。如果標準輸入是終端,它只會做特殊的事情。但我不知道爲什麼這會有所作爲,因爲不需要在cron作業中分離後臺進程。

但也許這將幫助:

(/usr/bin/nohup php /var/www/test/script.php >>/var/www/test/log.txt 2>&1 &) 
1

我建議增加調試的東西。一些可能的故障是:

您的用戶可以真正運行/var/www/test/startup腳本嗎?您的用戶可以寫信給/var/www/test/cron.log嗎?我建議只是有crontab條目像這樣:

* * * * * /var/www/test/startup 

的任何輸出(標準輸入和標準錯誤)應通過電子郵件發送給您的用戶(除非sendmail是本機上斷開)。

pgrep在哪裏?它是否在PATH=...設置的路徑中。 Ditto php

什麼是$KP?它呼應你知道日誌文件是可寫的:

touch /tmp/mylog 
chmod 666 /tmp/mylog 

然後在腳本:

echo "I'm getting pgrep from <`type -p pgrep`>" >>/tmp/mylog 
echo "KP is now <$KP>" >>/tmp/mylog 

也許script.php進程已經運行,並通過PID 1擁有的?

也許該腳本沒有寫入權限/var/www/test/log.txt/var/www/test歸您所有,或/var/www/test/log.txt爲666,如果其中一個父目錄不可寫或不可執行,則無關緊要。仔細檢查:

if [ ! -w /var/www/test/log.txt ]; then echo "Cannot write to /var/www/test/log.txt"; fi