【问题标题】:Unix Cron Not ExecutingUnix Cron 未执行
【发布时间】: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


【解决方案1】:

看来这就是我的问题的答案:

#!/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 脚本完美运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2019-03-28
    • 2023-04-07
    • 2014-06-30
    • 2020-12-17
    相关资源
    最近更新 更多