You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:54:03