如题,在测试站上部署 laravel 项目,但 CMD 命令行任务未定时执行。按照网上的教程排查 crontab 服务状态, service cron status,cron 服务显示运行中(active (running))。重启 cron 服务 service cron restart,依然无效。

最后是排查 cron 的运行日志(/var/log/cron.log),发现了报错信息 mailed 46 bytes of output but got status 0x00ff from MTA#012。提示信息应该是说运行报错了,发送到管理员邮箱失败,当前没有安装邮件发送服务 postfix,而非一位网友说的 cron把屏幕输出都发送到email了。因为检查了当前项目执行用户 www 的所有 cron 任务,没有发现屏幕输出内容,output 目的地都是具体的日志文件。

也就是说,这个邮件发送失败的错误是在定时任务运行报错的时候才会提示。

即以下的 laravel 命令行任务是会报错的:

* * * * * cd /root/wwwroot/laravel && php artisan schedule:run >> /root/schedule.log 2>&1

但这个任务本身在项目目录下直接(root)执行 php artisan schedule:run 是没有报错的,意识到应该是权限的问题后,修改指令目录及日志存储目录:

* * * * * cd /var/www/html/laravel && php artisan schedule:run >> ../schedule.log 2>&1

观察 cron 运行日志 tail -f /var/log/cron.log 和任务输出日志,执行成功!