在 Ubuntu 上使用 CRON 运行 PHP

在 Ubuntu 上使用 CRON 运行 PHP

请告诉我我做错了什么,为什么它无法运行:

 3 * * * * /usr/bin/php -q /var/www/CRON/hourly.php > /var/www/logPHP.log

logPHP.log已生成,但运行时为空。如果我将 3 替换为*,脚本将开始运行但永远不会结束。

当我在终端中复制此内容时:

/usr/bin/php -q /var/www/CRON/hourly.php > /var/www/logPHP.log

一切都按预期顺利进行。

Ubuntu 10.04 LTS,

PHP 5.3.2-1ubuntu4.9 with Suhosin-Patch (cli)

答案1

如果你使用 crontab -e创建 cron 条目时忽略缺少的用户部分。

检查 cron 条目的语法,缺少“用户”,例如:

3 * * * * some_user_here /usr/bin/php -q /var/www/CRON/hourly.php > /var/www/logPHP.log

检查 some_user_here 是否具有对日志文件的写入权限,方法是验证执行此操作时没有错误:

su -m some_user_here
cd /var/www/
touch logPHP.log

通过确认在执行下列操作时返回 /usr/bin/php 来检查您指定的位置是否存在 php 可执行文件:

whereis php

你在设置 cron 条目时是否使用了指南,例如https://help.ubuntu.com/community/CronHowto

答案2

您正在将标准输出 (STDOUT) 记录到日志文件,但忽略了标准错误 (STDERR)。将 STDERR 发送到日志文件几乎总是一个好主意。如果您忽略错误,您可能会错过关键问题。

修改你的 cronjob 以将 STDERR 重定向到同一个日志文件,使用2>&1

3 * * * * some_user_here /usr/bin/php -q /var/www/CRON/hourly.php > /var/www/logPHP.log 2>&1

或者,将错误发送到第二个日志文件:

3 * * * * some_user_here /usr/bin/php -q /var/www/CRON/hourly.php > /var/www/logPHP.log 2> /var/www/logPHP.err

然后,让脚本再次运行,并检查 /var/www/logPHP.log 中是否有错误。此时,您可能能够自己解决问题。如果您仍然需要帮助,您可以在此处使用错误日志的输出更新您的答案。

相关内容