Php 使用crontab运行bash脚本时出现问题

Php 使用crontab运行bash脚本时出现问题,php,linux,bash,cron,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/te

我有一个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
(作为我的用户)

cron正在运行,我可以在查看
htop
时看到这个过程。但是,它似乎没有工作或写入日志。它只占用了0%的CPU。
/var/www/test/
文件夹归my所有,日志文件具有
666
权限


怎么了?或者更确切地说,我可以做些什么来让错误日志正常工作,这样我就知道出了什么问题?

我怀疑这与nohup有关。只有当标准输入是终端时,它才执行其特殊的操作。但我不确定这为什么会有不同,因为在cron作业中不需要分离后台进程

但也许这会有所帮助:

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

我建议添加调试内容。可能出现的故障有:

您的用户能否实际运行
/var/www/test/startup
脚本?您的用户能否写入
/var/www/test/cron.log
?我建议将crontab条目设置为:

* * * * * /var/www/test/startup
任何输出(stdin和stderr)都应通过电子邮件发送给您的用户(除非此计算机上的
sendmail
被破坏)

pgrep的
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

如果您从命令行手动运行代码,它会正常工作/usr/bin/nohup php/var/www/test/script.php>/var/www/test/log.txt 2>&1&`@Crazy_Bash,输出为
[1]1858
(pid),进程正在运行。它似乎还写入了
log.txt
文件。这可能是权限问题,请尝试将sudo添加到crontab中,但如果它从CLI以普通用户身份运行,为什么需要从cron以root用户身份运行?
echo "I'm getting pgrep from <`type -p pgrep`>" >>/tmp/mylog
echo "KP is now <$KP>" >>/tmp/mylog
if [ ! -w /var/www/test/log.txt ]; then echo "Cannot write to /var/www/test/log.txt"; fi