前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS Supervisord守护进程实现Laravel异步队列任务

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

原创
作者头像
子润先生
修改2021-06-23 09:58:30
6790
修改2021-06-23 09:58:30
举报
文章被收录于专栏:用户8644135的专栏

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

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

安装 Supervisor

代码语言:javascript
复制
yum install -y supervisor

目录结构:

代码语言:javascript
复制
/etc
    supervisord.d/ #我们自定义的项目进程配置目录
    supervisord.conf #supervisor服务的一些配置

队列任务配置

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

代码语言:javascript
复制
[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

代码语言:javascript
复制
supervisord -c /etc/supervisord.conf

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

查看 supervisord 进程

代码语言:javascript
复制
ps -ef | grep supervisord
代码语言:javascript
复制
[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}

代码语言:javascript
复制
kill -s SIGTERM 1319
kill -s SIGTERM 29834

启动队列任务

代码语言:javascript
复制
supervisorctl reread
supervisorctl update
supervisorctl start sendMail:*

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 Supervisor
  • 队列任务配置
  • 启动 Supervisord
  • 启动队列任务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档