CentOS Supervisord守护进程实现Laravel异步队列任务

发布日期: 2020-01-21 19:52:42 作者: Stephen 评论: 0

Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动重启。

这里我以PHP框架Laravel为例,它提供了对队列的支持,要让队列监听常驻内存,就需要借助Supervisord守护进程工具,同时,解决使用了Supervisor后,Laravel队列被重复执行的问题(自己的配置问题)。

安装 Supervisor

yum install -y supervisor

目录结构:

/etc
    supervisord.d/ #我们自定义的项目进程配置目录
    supervisord.conf #supervisor服务的一些配置

队列任务配置

/etc/supervisord.d/ 目录中新增 laravel-worker.ini

[program:sendMail]
process_name=%(program_name)s_%(process_num)02d
command=/usr/local/php/bin/php /var/www/LaravelProject/artisan queue:work --queue=send_mail --sleep=3
autostart=true
autorestart=true
user=root
#numprocs=8
redirect_stderr=true

配置中,我注释掉了 numprocs=8 ,这是之前踩的一个坑,设置进程数为8,最后我的一个队列被重复执行多次,但在 job 表中只生成了一条记录,很显然就是 supervisor 配置问题导致,先把这里注释了。

启动 Supervisord

supervisord -c /etc/supervisord.conf

如果报错了,并且执行 systemctl status supervisord 状态为 failed ,表示失败了,先杀死在执行的进程

查看 supervisord 进程

ps -ef | grep supervisord
[root@izwz99d7x8qidiasecenewz ~]# ps -ef | grep supervisord
root      1319     1  0 Jan20 ?        00:00:28 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root     29834 29053  0 19:41 pts/0    00:00:00 grep --color=auto supervisord

然后执行 kill -s SIGTERM {pid}

kill -s SIGTERM 1319
kill -s SIGTERM 29834

启动队列任务

supervisorctl reread
supervisorctl update
supervisorctl start sendMail:*

快来抢沙发