centos 7 使用supervisor 管理laravel 队列

news/2023/12/1 10:43:00
supervisor使用 python开发的一个 client/server服务,是 linux/unix系统下的一个进程管理工具。它可以很方便的监听、停止、重启一个或多个进程。用 supervisor管理的进程,打你个进程意外被杀死, supervisor监听到进程死后,会自动将它重新拉起,很方便的做到自动恢复的功能,不再需要自己写 shell脚本控制。

安装supervisor

sudo pip install supervisor

或者

easy_install supervisor

还有其他安装方式,请参考官网

supervisor安装完成后会生成三个执行程序:

  • supervisord:守护进程服务(用于接收进程管理命令)
  • supervisorctl:客户端(用于和守护进程通信,发送管理进程的指令)
  • echo_supervisord_conf:生成初始配置文件程序

配置

运行supervisord服务的时候,需要指定supervisor配置文件,如果没有显示指定,默认在以下目录查找:

/etc/supervisord.conf
/etc/supervisor/supervisord.conf 
//默认是没有这些配置文件的

** 可以通过echo_supervisord_conf程序生成supervisor的初始化配置文件,如下所示:

 mkdir /etc/supervisor
 echo_supervisord_conf > /etc/supervisor/supervisord.conf

配置文件说明

supervisor的配置参数较多,下面介绍一下常用的参数配置,详细的配置及说明,请参考官方文档介绍。

[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid

;[inet_http_server]         ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user              ;登录管理后台的用户名
;password=123               ;登录管理后台的密码

[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10           ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                 ;可以打开的进程数的最小值,默认 200

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord

; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=tomcat          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

;包含其它配置文件
[include]
files = relative/directory/*.ini    ;可以指定一个或多个以.ini结束的配置文件
include示例:

配置管理进程

进程管理配置参数,不建议全都写在 supervisord.conf文件中,应该每个进程写一个配置文件放在 include指定的目录下包含进 supervisord.conf文件中。

打开最后的include注释:

 [include]
files=/etc/supervisor/conf.d/*.conf
//新增的 Supervisor 配置文件放在 /etc/supervisor/conf.d/ 目录下,并且以 conf 结尾。

这个时候就可以启动了服务了

supervisord -c /etc/supervisor/supervisord.conf

使用supervisor 管理 laravel 队列进程

我们使用 Laravel 队列,会用到 php artisan queue:work 命令,让它监听队列,我们可以通过 nohup 方式让它在后台运行,但是进程如果意外中断是不会自动重启的,所以使用 Supervisor 来监控进程是个很好的方式。

首先在 /etc/supervisor/conf.d/ 目录下新增一个 Supervisor 的配置文件,如下:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /www/artisan queue:work --tries=3
autostart=true
autorestart=true
user=nginx
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-queue.log

这里 user 填写网站运行进程的用户,如nginxnumprocs 表示启动多少个进程来监听 Laravel 队列。

一切就绪后,我们使用如下命令就可以启动队列进程的监听了:

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start laravel-worker:*
这里值得注意的是,如果 Laravel 处理队列的代码更改了,需要重启 Supervisor 的队列管理才能生效。

web 管理界面

clipboard.png

出于安全考虑,默认配置是没有开启web管理界面,需要修改supervisord.conf配置文件,打开http访权限:

[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001          ; (ip_address:port specifier, *:port for all iface)
username=user              ; (default is no username (open server))
password=123               ; (default is no password (open server))
port:绑定访问IP和端口,这里是绑定的是本地IP和9001端口 
username:登录管理后台的用户名 

参考文章:
https://laravel-china.org/top...

http://www.linuxidc.com/Linux...


http://www.niftyadmin.cn/n/3664074.html

相关文章

SolidWorks卸载重装教程

SolidWorks卸载重装教程血泪史AUTO_uninstaller一键完全卸载一阶白嫖重新安装可能遇到的几个问题画个方块验证一下是否安装成功hhh不知道这次能不能通过审核 ????三次审核不通过类 SolidWorks在安装或者使用的时候总是出现一些意…

php连接池mysql_PHP 数据库连接池实现(转)

此文着实无聊,不要浪费时间往下看啦摘要之前总是以脚本面向过程的方式写PHP代码,所以很大程度上来说,既不规范,也不安全,更不容易维护。为了代码的重用,准备写一套自己的工具库,这样的话&#x…

课程·面向对象·总结

所学&所得 学习了一些面向对象的基础概念:类型、对象、实现对象、继承、接口。在了解其基本概念后,用JAVA语言实现。在这一过程中,我对面向对象这门课有了初步的直观的认识。 在学习课程之前我已经使用面向对象概念进行开发,当…

ORB_SLAM3 + ROS采坑实录

ORB-SLAM3配置 https://github.com/UZ-SLAMLab/ORB_SLAM3 https://github.com/shanpenghui/ORB_SLAM3_Fixed EVO Evaluation of SLAM 4 — ORB-SLAM3 编译和利用数据集运行_一个摩羯座的程序猿 的 知识笔记-CSDN博客_orb_slam3数据集 1.ROS Melodic安装 Wiki 采用国内源&…

mysql 临时表的作用时间_什么时候会用到临时表?MySQL临时表的使用总结

摘要: MySQL在很多情况下都会用到临时表总结一下什么时候会用到临时表 什么是临时表MySQL用于存储一些中间结果集的表临时表只在当前连接可见当关闭连接时Mysql会自动删除表并释放所有空间。MySQL在很多情况下都会用到临时表,总结一下什么时候会用到临时…

性能提升永远在路上 全闪存如何求突破?

闪存阵列彻底改变了企业的存储环境。在迁移至全闪存阵列后,以往困扰存储已久的性能问题几乎完全得以解决。不过,最终用户期望的提升以及应用程序的复杂性很快带来了更大的挑战,换句话说,改进性能的需求永远不会停止。所幸的是&…

mysql中权限是什么_MySQL中出现权限管理问题

在MySQL中出现:"Access denied for user rootlocalhost (using password:YES)”该如何解决?解决方案:1、打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”,保存并关闭文件。2、重启MySQL服务。至此问题已经解决…

夏娜的菠萝包 JDFZ1098

Description 问题描述:夏娜很喜欢吃菠萝包,她的经纪人RC每半个月就要为她安排接下来的菠萝包计划。今天是7月份,RC又要去商场进货买菠萝包了。这次RC总共买了N种菠萝包,每种一个。每个菠萝包都有一个初始美味值Ti,每过一天就会减少…

git bash 管理员权限_liunx安装zsh、oh-my-zsh(无root权限安装)

有root权限#查看当前的 shell 环境echo $SHELL#查看本机的所有 shell 环境cat /etc/shells # 如果上述shell环境中有/bin/zsh 且有root权限则可直接切换shell环境 chsh -s /bin/zsh # 否则安装zsh,再切换shell环境 sudo apt install zsh 1、安装zsh没有root安装包的…

java mysql 删除记录_如何删除记录(字符串)JAVA和MYSQL

我成功地删除了一个整数,但是当我试图将它变为STRING时它会说“where子句中的未知列itemtodelete但是我的ITEMTODELETE是在数据库中声明的STRING不是一个整数它不删除一个STRING多少?下面是我的代码:private void DeleteButtonActionPerformed(java.awt.…

自动重启 supervisor

在开发或调试Node.js应用程序的时候,当你修改js文件后,总是要按下CTRLC终止程序,然后再重新启动,即使是修改一点小小的参数,也总是要不断地重复这几个很烦人的操作。有没有办法做到当文件修改之后,Node.js自…

mysql cmd定时_mysql定时任务(数据库管理工具and 纯命令行)

1、工具:Navicat2、通过下列语句l爱查询event是否开启打开Navicat命令列界面(点击工具可以看到或按F6) 输入下面命令show variables like %sche%;3、如果图中event_scheduler 为 OFF 通过执行下列语句,来开启event_schedulerset global event_scheduler…

工作负载就绪 | 戴尔EqualLogic八年一路走来,感谢有你!

得益于戴尔成功的收购与整合战略,EqualLogic持续创造辉煌,在性能、经济性、可靠性、服务等方面都有卓越表现,独步iSCSI存储市场,为戴尔全面进军企业级数据中心市场立下汗马功劳。 本文谨献给所有EqualLogic用户和心系戴尔存储的朋…

win7 mysql 1067_win7系统电脑无法启动MySQL服务,提示错误1067的解决方法

很多小伙伴都遇到过win7系统电脑无法启动MySQL服务,提示错误1067的困惑吧,一些朋友看过网上零散的win7系统电脑无法启动MySQL服务,提示错误1067的处理方法,并没有完完全全明白win7系统电脑无法启动MySQL服务,提示错误1…

mysql e 命令_MySQL基础入门之常用命令介绍

mysql命令介绍mysql 是数据库管理命令通过mysql --help来查看相关参数及使用说明mysql --help#mysql数据库管理命令Usage: mysql [OPTIONS] [database]#语法格式--help #查看帮助文档--auto-rehash#自动补全功能-A, --no-auto-rehash#不需自动补全-B, --batch#不使用历史文件&…

docker服务端与客户端通信方式

docker的服务端与客户端间可以通过unix、tcp方式进行通信。但默认情况下,服务端只监听本地unix接口/var/run/docker.sock,所以客户端只能在服务端所在的机器上使用该unix接口控制服务端。 客户端若想在与服务端进行跨机器通信,就得将服务端监…
最新文章