![在 Ubuntu 上使用 CRON 运行 PHP](https://linux22.com/image/559824/%E5%9C%A8%20Ubuntu%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20CRON%20%E8%BF%90%E8%A1%8C%20PHP.png)
请告诉我我做错了什么,为什么它无法运行:
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 中是否有错误。此时,您可能能够自己解决问题。如果您仍然需要帮助,您可以在此处使用错误日志的输出更新您的答案。