我有一个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
权限。
有什么问题?或者更确切地说,我可以改变什么来使错误日志工作,所以我知道什么是错的?
答案 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 &)