2014-10-10 45 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脚本。