Symfony 2.4 cron job手动运行正常 但crontab调度不运行问题咨询
Cron任务不触发排查方案
最可能的根因:你操作的是系统级crontab配置文件/etc/crontab,该配置的语法要求时间规则后必须指定执行任务的用户,你配置的Symfony定时任务缺少用户字段,而测试任务明确指定了root用户因此可以正常调度。
修正后的参考配置:
* * * * * root /usr/bin/php5.6 -f /var/www/utt/app/console reservation:createPropertyStatements 15 --env=prod &>> /var/www/utt/createPropertyStatements.log
如果修改配置后仍无法正常触发,可按以下步骤逐一排查:
1. 验证crontab语法合法性
执行命令检查crontab配置是否存在语法错误:
crontab -t /etc/crontab
如果返回语法错误,根据提示修正配置即可。
2. 排查crontab执行环境差异
crontab的运行环境和SSH登录的交互式环境变量不一致,可临时添加测试任务输出cron环境变量对比:
* * * * * root env > /tmp/cron_env.log
等待1分钟后查看/tmp/cron_env.log,和SSH下执行env的输出对比,确认是否缺少PHP或Symfony依赖的环境变量。
3. 检查权限配置
- 确认PHP二进制文件可执行权限:
ls -l /usr/bin/php5.6,确保root用户有执行权限 - 确认Symfony项目文件与日志目录权限:
ls -ld /var/www/utt/ /var/www/utt/app/console /var/www/utt/createPropertyStatements.log,确保root用户有对应目录的读写、执行权限 - 若日志文件不存在,确认父目录
/var/www/utt/允许root用户创建文件
4. 查看crontab运行日志
开启crontab日志记录:编辑/etc/rsyslog.conf,取消cron.* /var/log/cron行的注释,重启服务生效:
systemctl restart rsyslog systemctl restart cron
之后查看/var/log/cron文件,对应时间点会记录任务的调度状态与报错信息,可根据报错进一步定位问题。
5. 封装为Shell脚本执行
参考可正常运行的测试任务逻辑,将PHP命令封装为独立Shell脚本/var/www/utt/run_statements.sh:
#!/bin/bash /usr/bin/php5.6 -f /var/www/utt/app/console reservation:createPropertyStatements 15 --env=prod &>> /var/www/utt/createPropertyStatements.log
给脚本添加执行权限:
chmod +x /var/www/utt/run_statements.sh
修改crontab配置调用该脚本:
* * * * * root /bin/bash /var/www/utt/run_statements.sh
测试是否可正常调度。
内容的提问来源于stack exchange,提问作者ActualStudio
相关产品推荐
相关产品推荐

