用supervisor管理laravel常驻任务(队列等)配置

生产环境中需要一个可靠的进程管理工具来帮助laravel保持任务进程的状态,supervisor是非常广泛的选择

一. 安装supervisor

ubuntu环境下:

apt install supervisor

二. 配置supervisor

配置文件有两个位置:
主配置文件:/etc/supervisor/supervisord.conf 通常用于配置全局通用的配置
个性化配置文件:/etc/supervisor/conf.d/*.conf 通常用于配置单个进程组或者进程的个性化配置,类似于nginx配置时把多个server单独放在独立的配置文件里
supervisor的配置说明文档:www.rddoc.com/doc/Supervisor/3.3.1...

三.举个例子:

// 在/etc/supervisor/conf.d/路径下建立一个 foo.conf 文件,存放一个组名为foo的配置
[group:foo] // 建立一个进程组
programs=bar // 进程组包括的进程,多个进程用逗号隔开

[program:bar] // 建立一个进程
process_name=%(program_name)s_%(process_num)02d // 启动的进程名 : bar_00 bar_01 ...
command=php /data/www/laravel-path/artisan queue:work --sleep=3 --tries=3 // 执行的进程命令
autostart=true // 随supervisor启动自动启动
autorestart=true
user=deploy // 执行进程的用户
numprocs=8 // 进程数
redirect_stderr=true
stdout_logfile=/data/logs/foo.log

启动supervisor: supervisord -c /etc/supervisord.conf
进入supervisor操作台:supervisorctl

supervisorctl> reread // 读取新增加的配置
supervisorctl> update
supervisorctl> start foo:* //启动foo组下的所有进程

结语

记录的比较简略,希望能帮助到有需要的人

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8
颠倒的玉石

以前用这个守护redis。进程设置了2个,然后发现redis产出的数据重复了一遍。然后把进程改成1好了。然后一直在纠结这个进程啥时候能多点

3年前 评论

@颠倒的玉石 嗯,是需要设置进程数,不过redis有自己的守护进程,如果用supervisor来管理的话要改下配置,把守护进程模式关掉。不过这个数据复制一遍的情况也挺奇怪的,按理来说读同一个redis配置是启动不了两个进程的,会报端口被占用的错误,因为虽然是两个进程也是分先后启动的,后启动的redis会因为端口已经被先启动的占用而起不来,然后被supervisor不停重启。

3年前 评论
颠倒的玉石 3年前
Complicated

artisan起一个死循环,用这个守护这个死循环进程,用这种方式实现了 laravel 秒级定时任务 :joy:

3年前 评论
luke_wu (楼主) 3年前
no_pain 11个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!