十分钟玩转Supervisor
进程挂了怎么办?用用它就知道啦
一、前言
Supervisor是一款基于python的进程管理工具,可供用户自由管理类unix操作系统上的进程。它提供了许多简单可用的配置项,比如:自动重启挂掉的进程、自动log rotation等。它包含supervisord、supervisorctl和web server等组件,这就让我们能轻松管理、监控自己的服务。
二、安装
一切工具的引入的都免不了需要介绍它的安装步骤,supervisor自然也是这样。由于我们服务器不能连接外网,这里推荐使用下载tar包安装。
- 下载supervisor以及依赖的组件(安装包见附件)
- 安装、创建配置文件(脚本详见附件)
## 安装 cd supervisor-{version} sudo python setup.py install ## 创建配置文件 echo_supervisord_conf > /etc/supervisord.conf
- 启动试运行
## 启动 supervisord -c /etc/supervisord.conf
三、使用
在正式运用Supervisor管理我们的业务进程之前,先了解一下它的后台守护进程(supervisord)的基础配置项、终端(supervisorctl)的使用命令。
- supervisord配置文件
;Server配置区
[unix_http_server] ; 采用unix socket的server配置
file=/tmp/supervisor.sock ; socket文件路径
;username=user ; 用户名(默认不设置)
;password=123 ; 密码(默认不设置)
;[inet_http_server] ; 采用inet socket的server配置
;port=127.0.0.1:9001 ; 监听网卡及端口(*:port 所有网卡)
;username=user ; 用户名(默认不设置)
;password=123 ; 密码(默认不设置)
;守护进程配置项区
[supervisord]
logfile=/tmp/supervisord.log ; supervisord日志文件
logfile_maxbytes=50MB ; supervisord日志文件大小
logfile_backups=10 ; supervisord日志文件rotation个数
loglevel=info ; supervisord日志层级(默认: info; 其他: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; supervisord的pid文件
;客户端配置项区
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;unix socket地址
;serverurl=http://127.0.0.1:9001 ;inet socket地址
;username=chris ; 用户名
;password=123 ; 密码
;业务进程配置区
;[program:theprogramname] ; 进程标志
;command=/bin/cat ; 进程执行命令
;process_name=%(program_name)s ; 进程名称表达式 (默认 %(program_name)s)
;numprocs=1 ; 启动的进程数量 (默认 1)
;directory=/tmp ; 进程执行命令所在目录
;umask=022 ; 进程执行权限
;priority=999 ; 进程执行优先级 (默认 999)
;autostart=true ; 是否在supervisord启动时自启 (默认: true)
;startsecs=1 ; 进程启动后监控的秒数 (默认: 1s)
;startretries=3 ; 进程启动失败后的重启次数
;autorestart=true ; 进程挂掉后是否重启
;user=chrism ; 进程执行用户
;redirect_stderr=true ; 是否将标准错误重定向至标准输出
;stdout_logfile=/a/path ; 标准输出日志文件路径
;stdout_logfile_maxbytes=1MB ; 标准输出日志文件大小 (默认 50MB)
;stdout_logfile_backups=10 ; 标准输出日志文件保存数量 (默认 10)
;stderr_logfile=/a/path ; 标准错误日志文件路径
;stderr_logfile_maxbytes=1MB ; 标准错误日志文件大小 (默认 50MB)
;stderr_logfile_backups=10 ; 标准错误日志文件保存数量 (默认 10)
;业务进程组配置区
;[group:thegroupname]
;programs=progname1,progname2 ; 进程组包含的进程
;priority=999 ; 进程组启动的优先级 (默认 999)
;外部包含配置区
[include] ; 业务进程或进程组单独配置时,可应用
files = /data/webdocs/script/supervisor/*.conf
进程管理配置参数,不建议全都写在supervisord.conf文件中,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中。
- supervisord执行命令
supervisord -c supervisord.conf # 根据配置文件supervisord.conf启动supervisor服务
- supervisorctl使用命令
supervisorctl status # 进程运行状态
supervisorctl start <name> # 启动某进程
supervisorctl start <gname>:* # 启动某进程组
supervisorctl start all # 启动所有进程
supervisorctl stop <name> # 停止某进程
supervisorctl stop <gname>:* # 停止某进程组
supervisorctl stop all # 停止所有进程
supervisorctl restart <name> # 重启某进程
supervisorctl restart <gname>:* # 重启某进程组
supervisorctl restart all # 重启所有进程
supervisorctl reload # 重启supervisord,会重启所有进程
supervisorctl reread # 显示配置文件发生更改的进程,但是不重启进程
supervisorctl update # 重启配置文件发生更改的进程,会添加或移除进程
supervisorctl clear all # 清空所有进程的日志文件
supervisorctl是supervisord的一个命令行客户端工具,启动时需要指定与 supervisord使用同一份配置文件,否则与supervisord一样按照顺序查找配置文件,或者可以在启动supervisord时使用inet socket启动server,这样supervisorctl可以通过socket进行访问。
- web server
除了使用supervisorctl之外,还可以配置supervisrod启动web管理界面,这个web后台使用 Basic Auth的方式进行身份认证。
四、原理
Supervisord生成主进程并将主进程变成守护进程,supervisord依次生成配置文件中的工作进程,然后依次监控工作进程的工作状态,这些工作进程托管于supervisord主进程,因为它们的父进程便是supervisord主进程。并且主进程负责与supervisorctl客户端通信,负责子进程的信号监听,实现主进程对子进程的控制。
graph TD
Supervisord主进程-->管道
Supervisord主进程-->Supervisorctl进程
管道-->业务进程work1
管道-->业务进程work2
如图所示,supervisord的父进程pid为1(系统内核进程),而业务进程的父进程pid是13108,即supervisord进程,说明业务进程被supervisord托管。
五、结语
Supervisor是一款简单方便配置的进程管理工具,它提供了可视化界面和终端来呈现与管理用户进程。本文简单介绍Supervisor的使用方法,它有很丰富的功能,还有其他很多项配置,可以在官方文档获取更多信息:supervisord.org/index.html
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbache
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01