虚拟主机环境下运行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
相关产品推荐
相关产品推荐

