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

虚拟主机环境下运行Laravel的php artisan queue:work与reverb start方案咨询

在Laravel中稳定运行php artisan queue:work和php artisan reverb start的可行方案

一、队列 Worker 稳定运行方案

1. Supervisor(生产环境首选)

Supervisor 是Linux下的进程管理工具,能自动重启崩溃的进程,确保队列持续运行:

  • 安装 Supervisor:
    Ubuntu/Debian:sudo apt install supervisor
    CentOS/RHEL:sudo yum install supervisor
  • 创建队列进程配置文件,路径为/etc/supervisor/conf.d/laravel-queue.conf,替换为你的项目路径和队列驱动:
[program:laravel-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/your-laravel-project/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/your-laravel-project/storage/logs/queue-worker.log
  • numprocs:启动的进程数量,根据服务器CPU核心数调整
  • --max-time=3600:强制进程每小时重启,避免内存泄漏
  • 加载配置并启动进程:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-queue:*
  • 查看运行状态:sudo supervisorctl status laravel-queue

2. Systemd 服务

如果你的服务器使用Systemd(大部分现代Linux发行版默认),可以用系统服务管理队列:

  • 创建服务文件/etc/systemd/system/laravel-queue.service:
[Unit]
Description=Laravel Queue Worker
After=network.target

[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/your-laravel-project/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
RestartSec=5
StandardOutput=append:/var/www/your-laravel-project/storage/logs/queue-worker.log
StandardError=append:/var/www/your-laravel-project/storage/logs/queue-worker-error.log

[Install]
WantedBy=multi-user.target
  • 启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable laravel-queue.service
sudo systemctl start laravel-queue.service
  • 查看状态:sudo systemctl status laravel-queue.service

3. 排查nohup失效原因

之前用nohup无效,大概率是这几个问题:

  • 未指定日志输出路径,导致权限不足或进程无法写入日志而退出:
    正确命令:nohup php artisan queue:work > storage/logs/queue-nohup.log 2>&1 &
  • 进程未彻底脱离终端,关闭终端时被终止:
    配合disown使用:nohup php artisan queue:work > storage/logs/queue-nohup.log 2>&1 & disown
  • 进程本身崩溃:查看storage/logs/laravel.log或指定的日志文件,排查队列驱动配置、依赖缺失等问题

二、Reverb WebSocket 服务稳定运行方案

Reverb 作为WebSocket服务,同样需要长期驻留进程,推荐用以下两种方式:

1. Supervisor 管理 Reverb

创建配置文件/etc/supervisor/conf.d/laravel-reverb.conf:

[program:laravel-reverb]
process_name=%(program_name)s
command=php /var/www/your-laravel-project/artisan reverb start
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/your-laravel-project/storage/logs/reverb.log
  • 加载配置并启动:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-reverb

2. Systemd 服务管理 Reverb

创建服务文件/etc/systemd/system/laravel-reverb.service:

[Unit]
Description=Laravel Reverb WebSocket Service
After=network.target

[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/your-laravel-project/artisan reverb start
RestartSec=5
StandardOutput=append:/var/www/your-laravel-project/storage/logs/reverb.log
StandardError=append:/var/www/your-laravel-project/storage/logs/reverb-error.log

[Install]
WantedBy=multi-user.target
  • 启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable laravel-reverb.service
sudo systemctl start laravel-reverb.service

3. Reverb 启动失败排查

  • 检查config/reverb.php配置:确认驱动、监听端口、认证规则是否正确
  • 开放端口:默认Reverb监听8080端口,需要在防火墙中放行,比如Ubuntu:sudo ufw allow 8080/tcp
  • 查看日志:检查storage/logs/reverb.log和storage/logs/laravel.log中的错误信息

额外注意事项

  • 队列进程建议定期重启,避免内存泄漏,通过--max-time参数或Supervisor配置实现
  • 如果用Nginx反向代理Reverb,需要添加WebSocket支持配置:
location /reverb {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

内容的提问来源于stack exchange,提问作者Arthur Cervania

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:53:22