2014-10-10 78 views
-1

我執行一個shell腳本作爲cron作業的每一分鐘就像這樣:克朗的Unix不予執行

* * * * * /bin/bash /var/www/html/stream.sh 

腳本包含以下代碼:

#!/bin/sh 
if ps -ef | grep -v grep | grep get_tweets.php ; then 
     exit 0 
else 
     nohup php /var/www/html/streaming/db/get_tweets.php > /dev/null & 
     exit 0 
fi 

我也運行的另一個shell腳本作爲cron,兩者之間的唯一區別是「get_tweets」被替換爲「parse_tweets_keyword」並且cron被執行如此:

* * * * * /bin/bash /var/www/html/process-check.sh 

問題是,而後者的cron工作完全正常,第一似乎並不成功運行腳本,但是當我運行命令:

nohup php /var/www/html/streaming/db/get_tweets.php > /dev/null & 

腳本運行完美,所以我不完全確定問題是什麼。所有文件的權限是正確和可執行的,我在crontab下以root身份運行crons,並且我試圖執行的兩個PHP腳本都作爲後臺進程運行。

如果有人能幫助或知道這個問題,將不勝感激。我也願意以更好的方式運行PHP腳本,或許作爲crontab中的一行,而不是運行shell腳本來通過cron運行PHP腳本。

+0

它們是由同一用戶運行嗎?如果沒有,具有'get_tweets.php'的用戶的路徑上有php嗎? – prodigitalson 2014-10-10 21:00:15

+1

Yikes ...避免'grep -v grep',並使用像'ps axc | grep ...' – 2014-10-10 21:00:39

+0

兩者都以超級用戶身份運行,儘管我嘗試以不同的用戶身份運行並出現相同的問題。 ps axc實際上並不實際顯示PHP腳本名稱本身? – 2014-10-10 21:12:18

回答

0

所以看來這是回答我的問題:

#!/bin/sh 
cd /var/www/html/streaming/db 

if ps ax | grep -v grep | grep get_tweets.php ; 
then 
     exit 0 
else 
     nohup php ./get_tweets.php > /dev/null & 
     exit 0 
fi 

它甚至會以root身份運行get_tweets.php不會不首先改變目錄實際運行命令之前執行的出現。按照第二行:

cd /var/www/html/streaming/db 

雖然我不完全知道爲什麼它不會跑,因爲parse_tweets_keyword.php跑完全使用貼在我的問題第一bash腳本。