centos/ubuntu/Mac中使用Supervisor监控管理laravel queue队列进程
Song •
6159 次浏览 •
2个评论 •
2018年02月27日
Supervisor
是一个Linux
操作系统上的进程监控软件,它会在queue:listen
或queue:work
命令发生失败后自动重启它们。
一、centos/ubuntu/Mac/pip安装supervisor
# centos安装supervisor
yum install -y supervisor
# Ubuntu安装supervisor
sudo apt-get install supervisor
# Supervisor是由Python写成,可以使用pip安装
sudo pip install supervisor
# Mac安装supervisor
brew install supervisor
二、简单使用supervisor监听laravel队列
假设我们开发好了一个队列,队列是基于reids
,文件目录为/var/www/admin
,如下为我们的使用代码:
由于不同系统文件路径不同,ubuntu
位于/etc/supervisor/conf.d/
新建文件,而centos
需要在/etc/supervisord.conf
中编辑
# ubuntu环境
vim /etc/supervisor/conf.d/test-report.conf
# centos环境
vim /etc/supervisord.conf
使用如下代码来启动与监控一个queue:work
进程,其中tries
代表最多尝试3次,否则一直执行;sleep代表无队列时休眠时间:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/etc/supervisor/logs/admin-report.log
代码解释:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d ; 一个python字符串表达式,用来表示supervisor进程启动的这个的名称
command=php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3 ; 被监控的进程启动命令
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启.
user=root ; supervisord以root运行
numprocs=8 ; 启动几个进程
redirect_stderr=true ; 重定向stderr到stdout
stdout_logfile=/etc/supervisor/logs/worker.log ; 进程的标准输出写入文件中
三、启动Supervisor
当这个配置文件被创建后,你需要更新Supervisor
的配置,并用以下命令来启动该进程:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
四、查看Supervisor进程是否有启动
ps -ef | grep artisan
出现如下表示启动成功,由于我们numprocs
为8,所以启动8个进程;
root 31139 30647 0 15:04 ? 00:00:00 php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
root 31140 30647 0 15:04 ? 00:00:00 php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
root 31141 30647 0 15:04 ? 00:00:00 php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
root 31142 30647 0 15:04 ? 00:00:00 php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
root 31143 30647 0 15:04 ? 00:00:00 php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
root 31144 30647 4 15:04 ? 00:00:05 php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
root 31145 30647 0 15:04 ? 00:00:00 php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
root 31146 30647 0 15:04 ? 00:00:00 php /var/www/admin/artisan queue:work --daemon --tries=3 --sleep=3
五、常见问题与错误
1、laravel-worker: ERROR (no such group)
代表你的配置文件未找到,请检查文件路径是否正确
2、这里监听的队列应该是同一个队列 在这里是 sqs 。
是的,都是监听同一个队列。
3、开numprocs
个监听进程,是否会造成两个任务并发执行的问题?
多个进程读取同一个队列,也不会读取到一样的数据;可以参考Laravel Redis 多个进程同时取队列问题。当多个worker同时监听的时候,实际上就是生产-消费的关系,在每个进程从队里中pop任务的时候都由Laravel根据不同的驱动提供不同的原子性支持,保证同一个任务不会被多进程同时消费(database驱动使用了事务,redis则使用Lua脚本获取/更新任务以保证原子性)
更多相关好文
-
laravel中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
laravel11如何启用routes/api.php无状态路由 2025-03-06
热门文章
-
laravel11如何启用routes/api.php无状态路由 2025-03-06
-
oppo手机默认浏览器urlscheme 2025-02-13
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
-
Mac 安装mysql并且配置密码 2024-11-20
-
阿里云不同账号(跨账号)ECS服务器同地域如何实现免费内网互通? 2024-11-12
Laravel模型更新全表如何实现?