Laravel 8 Sail环境下cron定时任务无法自动执行问题求助
解决方案
- 核心问题1:系统级crontab配置缺少执行用户
放在/etc/cron.d/目录下的crontab属于系统级配置,格式要求必须在时间规则和执行命令之间指定运行用户,你当前的crontab没有填写用户,cron会直接忽略该条规则。
修改你的crontab配置文件内容如下:
这里使用* * * * * sail cd /var/www/html && php artisan schedule:run --no-ansi >> /var/log/cron.log 2>&1 # Don't remove the empty line at the end of this file. It is required to run the cron jobsail用户执行命令,和Laravel项目默认运行用户保持一致,避免权限不足导致执行失败。 - 常见问题2:cron服务未随容器启动
Sail默认容器启动只会运行php-fpm服务,你虽然在镜像里安装了cron,但没有配置启动项,容器运行时cron进程处于未启动状态,自然不会执行调度。
开发环境可以直接修改docker-compose.yml中laravel.test服务的启动命令:
修改后重启Sail容器即可生效。services: laravel.test: # 保留原有其他配置不变,新增以下command配置 command: sh -c "cron && php-fpm" - 排查验证步骤
进入容器后执行ps aux | grep cron,如果有cron进程输出说明服务启动正常;如果任务仍然不执行,查看/var/log/syslog中的cron相关日志,可定位具体错误原因。
内容的提问来源于stack exchange,提问作者Soufiane Odf
相关产品推荐
相关产品推荐

