我有一个 PHP 文件,该文件应该由 crontab 安排每天发送一封电子邮件。这是我的 crontab:
45 23 * * * php /var/www/html/linus/class/runnable/dailyStaffReport.php
我注意到它不起作用,也就是说,电子邮件没有被发送。所以我尝试了以下方法:
00 11 * * * php /var/www/html/linus/class/runnable/dailyStaffReport.php
>> /var/log/crontab.linus.log 2>&1
注意:这里的时间安排并不重要,我为了测试目的不断改变它
那没有用。该文件crontab.linus.log
未创建。
在检查/var/log/cron
文件时,我注意到我的 cron 被执行了
Feb 25 11:22:01 shoutcast01 CROND[3395]: (apache) CMD (php
/var/www/html/linus/class/runnable/dailyStaffReport.php
>> /var/log/crontab.linus.log 2>&1)
最后,如果我手动执行,php /var/www/html/linus/class/runnable/dailyStaffReport.php
我会立即在收件箱中收到电子邮件。我什至echoes
在 PHP 脚本中编写了一些脚本,希望尝试看看脚本是否在某个地方失败了。
[root@shoutcast01 ~]# php /var/www/html/linus/class/runnable/dailyStaffReport.php
LOADING STAFF USERS...
COMPUTING STAFF WORK TIME...
BUILDING CHART...
SAVING CHART...
WRITING DOWN THE CHART...
SENDING THE EMAIL...
1
DONE.
类似地,我还有另一个文件,计划每 2 分钟发送一次电子邮件,并且运行良好。
[root@shoutcast01 ~]# crontab -u apache -l
22 11 * * * php /var/www/html/linus/class/runnable/dailyStaffReport.php
>> /var/log/crontab.linus.log 2>&1
*/2 * * * * php /var/www/html/linus/class/runnable/dispatchEmail.php
总结
- 如果我在终端中手动执行脚本,电子邮件就会被送达。
- 电子邮件未送达,但 cron 日志告诉我脚本已执行。
- 我无法记录任何内容
>> /var/log/crontab.linus.log 2>&1
关于我可以做什么来尝试解决这个问题有什么建议吗?
答案1
调试不起作用的问题是我试图将调试信息存储到其中/var/log/crontab.linus.log
,但该文件不存在,并且用户apache
无权创建它。
意识到这一点后,我自己创建了该文件
touch crontab.linus.log
chown apache crontab.linus.log
chgrp apache crontab.linus.log
chmod 0777 crontab.linus.log
然后我又重新调度了任务,等待执行。事实证明,最初的问题也与许可有关。
PHP 致命错误:未捕获异常“ImagickException”,消息“无法写入文件 [...]
所以我chmod 0777
在 PHP 脚本保存图像的文件夹中设置。之后,apache 用户正在执行的计划已成功执行,并且电子邮件已发送。