无法使用crontab运行bash脚本

时间:2012-10-02 20:50:58

标签: php linux bash cron

我有一个bash脚本,用于检查我的PHP服务是否正在运行,并在需要时启动它。

#!/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权限。

有什么问题?或者更确切地说,我可以改变什么来使错误日志工作,所以我知道什么是错的?

2 个答案:

答案 0 :(得分:1)

我建议添加调试内容。一些可能的失败是:

您的用户可以实际运行/var/www/test/startup脚本吗?您的用户可以写信给/var/www/test/cron.log吗?我建议只有crontab条目:

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

任何输出(stdin和stderr)都应该通过电子邮件发送给您的用户(除非此机器上的sendmail被破坏)。

pgrep在哪里?是否在PATH=...设置的路径中。同上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

答案 1 :(得分:0)

我怀疑它与nohup有关。如果标准输入是终端,它只做它的特殊事情。但我不确定为什么这会有所作为,因为没有必要在cron工作中分离后台进程。

但也许这会有所帮助:

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