通过supervisor管理laravel队列任务守护进程

通过supervisor管理laravel队列任务守护进程

背景:laravel队列,在调试使用时可以使用php artisan queue:work来启用队列,但是实际项目部署后,需要通过守护进程一直启动队列,在这使用 supervisor 来管理laravel队列守护进程,并且可以自动重启队列

  1. 安装supervisor
# mac 安装supervisor
brew install supervisor
  1. supervisor的配置文件目录
/usr/local/etc/supervisor.conf
  1. 创建配置文件目录:
# 类似于nginx配置文件中的services目录,一个项目使用一个配置文件,这个目录就是存放所有配置文件的地方,需要手动创建一下
mkdir /usr/local/etc/supervisor.d
  1. 新建项目配置文件:
[program:laravel-queue-worker]  ; 是应用程序的唯一标识,不能重复 
 # 指定进程的命名规则:foo_00,foo_01... 
 process_name=%(program_name)s_%(process_num)02d 

 # command 必须。程序启动后执行的命令,可以是绝对命令,也可以是相对命令(在环境$PATH中搜索可执行文件)。受控的程序本身不应该是守护程序。 
 command=php /Users/wangkaikai/dnmp/www/ali-php/artisan queue:work --sleep=3 --tries=3 

 # Supervisor 启动时自动启动该程序 
 autostart=true 

 # 指定进程挂掉时 Supervisor 自动重启进程 
 autorestart=true 

 # 指定运行进程使用的用户,需要 Supervisor 以root用户运行。使用 setuid 切换用户,不会启动shell程序和改变环境变量 
 user=wangkaikai 

 # 运行和监控的进程数量,进程位于laravel-worker组内,指定该值需同时设置process_name包含%(process_num)s 
 numprocs=8 

# 将 stderr 错误输出重定向到 stdout 标准输出 
redirect_stderr=true 

# 将进程的 stdout 标准输出写入文件中,设为NONE不会创建任何日志文件。 
stdout_logfile=/Users/wangkaikai/dnmp/www/ali-php/storage/logs/queue-worker.log

supervisor常用命令

# 查看所有进程的状态
supervisorctl status 
# 停止laravel-queue-worker
supervisorctl stop laravel-queue-worker
# 启动laravel-queue-worker
supervisorctl start laravel-queue-worker
# 重启laravel-queue-worker
supervisorctl restart laravel-queue-worker
# 配置文件修改后可以使用该命令加载新的配置
supervisorctl update
# 重新启动配置中的所有程序
supervisorctl reload
posted @ 2022-08-20 18:35  alisleepy  阅读(725)  评论(0编辑  收藏  举报