【发布时间】:2014-12-06 02:57:06
【问题描述】:
我每分钟都在执行一个 shell 脚本作为 cron 作业,如下所示:
* * * * * /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 脚本。
【问题讨论】:
-
它们是由同一个用户运行的吗?如果没有,
get_tweets.php的用户路径上是否有 php? -
哎呀......避免
grep -v grep,并使用像ps axc | grep ...这样的明智的东西 -
两者都以 root 身份运行,尽管我尝试以不同的用户身份运行并且出现相同的问题。 ps axc 实际上并不显示 PHP 脚本名称本身?
-
ps ax怎么样?这应该有效; grep -v grep 效率极低。
标签: php shell unix cron crontab