0

我有一个 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权限。

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

4

2 回答 2

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则归您所有或是否为 666 都没有关系。/var/www/test/log.txt再检查一遍:

if [ ! -w /var/www/test/log.txt ]; then echo "Cannot write to /var/www/test/log.txt"; fi
于 2012-10-02T22:09:20.550 回答
0

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

但也许这会有所帮助:

(/usr/bin/nohup php /var/www/test/script.php >>/var/www/test/log.txt 2>&1 &)
于 2012-10-02T21:45:29.090 回答