Laravel 5.7新创建Job仅生成实例不执行的问题求助
Laravel 5.7 队列Job仅生成实例不执行的排查方案
1. 校验Supervisor配置准确性
检查你的Supervisor程序配置,确保监听队列名称与dispatch()时指定的queue_test完全一致,正确配置示例如下:
[program:queue_test] command=php /你的项目绝对路径/artisan queue:work database --queue=queue_test --sleep=3 --tries=3 autostart=true autorestart=true user=你的服务器运行用户(如www-data) redirect_stderr=true stdout_logfile=/你的项目绝对路径/storage/logs/queue_test.log
- 确认
--queue=queue_test参数存在且无拼写错误 - 检查
command中的项目绝对路径是否正确 - 查看Supervisor日志文件(stdout_logfile指定路径),排查启动或执行阶段的报错信息
2. 检查队列进程状态
- 执行
supervisorctl status queue_test,确认进程处于RUNNING状态;若为STOPPED或EXITED,执行supervisorctl restart queue_test重启进程 - 手动在服务器运行队列命令测试:
php artisan queue:work database --queue=queue_test --verbose,观察是否有Job被执行,同时查看实时输出的错误信息
3. 验证队列数据库记录
查看jobs表,确认新生成的Job记录中queue字段值为queue_test,若队列名称不匹配,监听进程不会处理该Job
4. 排查Job类本身问题
- 确保
MatchSendEmail类命名空间正确、无语法错误,handle方法未抛出未捕获的异常 - 在handle方法开头添加基础日志输出测试:
public function handle() { \Log::info('MatchSendEmail Job 开始执行'); // 其余业务逻辑 }
手动执行队列命令后,查看storage/logs/laravel.log是否存在这条日志,判断Job是否被触发
5. 确认队列配置生效
- 执行
php artisan config:cache清除配置缓存,确保.env中QUEUE_CONNECTION=database的配置生效 - 检查
queue.php中database连接的数据库信息,确保与项目主数据库配置一致
6. 检查权限问题
- 确认Supervisor进程运行用户拥有项目目录(尤其是
storage和bootstrap/cache)的读写权限 - 避免因权限不足导致Job无法写入日志或执行相关操作
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

