Laravel项目迁移服务器后Firebase推送通知失效,队列Job不自动运行如何解决
解决方案
方案1:使用 Supervisor 守护队列进程(生产环境首选)
这是Laravel官方推荐的生产环境队列守护方案,可实现进程异常退出自动重启、开机自启,步骤如下:
- 安装Supervisor:
Debian/Ubuntu系统执行apt install supervisor
CentOS/RHEL系统执行yum install supervisor - 进入Supervisor配置目录:
cd /etc/supervisor/conf.d/ - 新建队列配置文件
laravel-worker.conf,写入以下配置,注意替换对应路径和用户参数:
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /你的项目绝对路径/artisan queue:work --sleep=3 --tries=3 --max-time=3600 autostart=true autorestart=true stopasgroup=true killasgroup=true user=替换为你的web运行用户,比如www-data、nginx numprocs=4 redirect_stderr=true stdout_logfile=/你的项目绝对路径/storage/logs/worker.log stopwaitsecs=3600
- 保存配置后执行命令生效:
重载配置:supervisorctl reread
启用配置:supervisorctl update
启动所有队列进程:supervisorctl start laravel-worker:* - 验证运行状态:执行
supervisorctl status,所有laravel-worker进程显示RUNNING即为正常
方案2:使用Systemd服务(无需额外安装软件)
如果你的服务器使用带Systemd的Linux发行版,无需安装额外软件即可实现队列守护:
- 新建Systemd服务文件
/etc/systemd/system/laravel-queue.service,写入以下配置,注意替换对应参数:
[Unit] Description=Laravel Queue Worker After=network.target [Service] User=替换为web运行用户 Group=替换为web运行用户组 Restart=always ExecStart=php /你的项目绝对路径/artisan queue:work --sleep=3 --tries=3 --max-time=3600 [Install] WantedBy=multi-user.target
- 保存后执行命令生效:
重载Systemd配置:systemctl daemon-reload
开启开机自启:systemctl enable laravel-queue.service
启动队列服务:systemctl start laravel-queue.service - 验证运行状态:执行
systemctl status laravel-queue.service,显示active(running)即为正常
配置完成后注意事项
- 每次修改队列相关的Job代码后,需要重启队列进程才能生效:Supervisor环境执行
supervisorctl restart laravel-worker:*,Systemd环境执行systemctl restart laravel-queue.service - 确认项目
.env文件中QUEUE_CONNECTION参数和原服务器配置一致,不要设置为sync同步模式,该模式下不会走异步队列 - 确认项目
storage目录权限配置正确,队列运行用户拥有该目录读写权限,避免权限问题导致进程异常退出
内容的提问来源于stack exchange,提问作者Anuj Burnwal
相关产品推荐
相关产品推荐

