如何在同一服务器通过Supervisor配置多个Laravel Worker?
多Laravel项目的Supervisor队列Worker配置方案
核心方案是为每个Laravel项目单独定义一个独立的Supervisor Program配置块,每个块使用唯一的标识名称,避免进程冲突。以下是具体配置示例和注意事项:
配置示例
项目app2.com的Worker配置
[program:laravel-worker-app2] process_name=%(program_name)s_%(process_num)02d command=php /home/forge/app2.com/artisan queue:work sqs --sleep=3 --tries=3 autostart=true autorestart=true user=forge numprocs=8 redirect_stderr=true stdout_logfile=/home/forge/app2.com/worker.log
项目app3.com的Worker配置
[program:laravel-worker-app3] process_name=%(program_name)s_%(process_num)02d command=php /home/forge/app3.com/artisan queue:work sqs --sleep=3 --tries=3 autostart=true autorestart=true user=forge numprocs=8 redirect_stderr=true stdout_logfile=/home/forge/app3.com/worker.log
关键配置改动点
- 唯一Program名称:每个
[program:]后的标识必须唯一(比如用项目域名后缀区分),确保Supervisor能识别不同项目的Worker进程 - 项目路径匹配:
command中的artisan文件路径、stdout_logfile中的日志路径,都要对应到当前项目的实际目录 - 独立日志文件:每个项目的Worker日志单独存放,避免日志混乱,方便后续排查问题
实用操作命令
配置完成后,执行以下命令让Supervisor加载新配置:
sudo supervisorctl reread sudo supervisorctl update
单独管理某个项目的Worker进程:
# 启动app2的所有Worker进程 sudo supervisorctl start laravel-worker-app2:* # 重启app3的所有Worker进程 sudo supervisorctl restart laravel-worker-app3:* # 查看所有Worker进程状态 sudo supervisorctl status
内容的提问来源于stack exchange,提问作者JohnDoe
相关产品推荐
相关产品推荐

