使用supervisor实现进程管理
去年做一个项目,涉及大量脚本操作,然后了解到了supervisor这个工具,可以非常方便的实现脚本运行的管理,从而大大解放了人力;前几天又被问到相关配置,有点忘记了,写个文档简单整理下。
0x01 介绍
supervisor 是一个基于 python 的进程管理工具,提供了统一的方式方便地执行进程启动、关闭、重启操作。
这个工具的原理就是通过 fork/exec
的方式将待管理的进程作为自己的子进程来启动,这样子进程挂掉时,父进程就可以获取子进程的相关信息,然后做相应的处理。
简单理解,就是把普通的命令行进程转化为一个后台的守护进程,然后监控这个进程的状态并提供管理操作(最常用的就是自动重启hhh)。
实现这一切功能,我们只需要装一个superviosr工具,然后做简单的配置,其他的都已经实现好了。
支持运行平台是 Linux/UNIX/MacOS ,不支持 Windows
0x02 安装
安装非常简单,因为基于python,已经有现成的包了,直接用pip
安装
pip3 install superviosr
安装后就可以使用以下三个命令
echo_supervisord_conf
supervisorctl
supervisord
supervisor 是一个 C/S 架构的程序,服务端是 superviosrd,客户端是 supervisorctl,可以使用这两个命令执行相关的操作,echo_supervisord_conf 是额外的一个方便配置的工具
0x03 配置
supervisor 的配置包含两部分,superviosrd 的配置和应用进程的配置
1、supervisord
supervisord 是 supervisor 的主进程,也是进程管理的 server,它会根据配置文件创建应用程序子进程,管理子进程的整个生命周期。
supervisord 还内置 web server 和 XML-RPC Interface,方便实现远程进程管理。
使用 echo_supervisord_conf 可以查看默认配置,我们直接输出或重定向到一个配置文件
echo_supervisord_conf > ./supervisord.conf
sudo mv ./supervisord.conf /etc/supervisor/supervisord.conf
对其中有用的配置内容进行说明
[unix_http_server] ; 配置一个监听在 socket 上的 Http Server
file=/tmp/supervisor.sock ; UNIX socket 文件,C/S 架构通信用的
;chmod=0700 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server)[inet_http_server] ; 配置一个监听在 TCP 上的 Http Server,提供 web 管理
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)[supervisord] ; supervisord 进程的全局配置
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
;umask=022 ; process file creation umask; default 022
;user=supervisord ; setuid to this UNIX account at startup; recommended if root
;identifier=supervisor ; supervisord identifier, default is 'supervisor'
;directory=/tmp ; default is not to cd during start
;nocleanup=true ; don't clean up tempfiles at start; default false
;childlogdir=/tmp ; 'AUTO' child log dir, default $TEMP
;environment=KEY="value" ; key value pairs to add to environment
;strip_ansi=false ; strip ansi escape codes in logs; def. false[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface[supervisorctl] ; 配置一个监听在 socket 上的 Http Client
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket; 通过上面 inet_http_server 中的配置连接 supervisord
serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket; 通过HTTP直接访问URL连接
;username=chris ; should be same as in [*_http_server] if set
;password=123 ; should be same as in [*_http_server] if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available[include] ; 用来包含其他的配置文件,如应用程序配置
files = ./conf.d/*.ini ; 配置文件地址,支持 ini 和 conf
启动 supervisord,通过 -c 指定配置文件路径,不指定时会按照默认路径依次查找
superviosrd [-c /etc/supervisor/supervisord.conf]
查看运行的进程
ps aux | grep supervisord
还可以通过 inet_http_server 中配置的 web 服务查看进程相关信息,访问 localhost:9001 ,注意配置了用户名密码访问时需要输入
2、program
应用程序的配置文件可以直接写到 supervisord 的配置文件中,如果程序较多,最好分别写到不同的文件中然后 include 进来,需要修改包含路径的配置
[include]
files = ./conf.d/*.ini
应用程序配置文件为
[program:demo] ; 监控程序的配置项; program 关键字,指明应用程序的唯一标志
directory = /directory/of/demo ; 程序的启动目录
command = command to start demo ; 启动命令
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就认为已经正常启动
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
stdout_logfile = /log/file/name ; stdout 日志文件,supervisord 会自动创建
3、supervisorctl
对应 supervisord 的一个客户端命令行工具,提供类似 shell 的操作接口,可以连接到不同的 supervisord 进程管理各自的应用程序,通过 UNIX sock 或者 TCP 与服务端通信
进入 shell 界面
superviosrctl [-c /etc/supervisor/supervisord.conf]
命令
> status # 查看程序状态
> stop [demo] # 关闭 demo 程序
> start [demo] # 启动 demo 程序
> restart [demo] # 重启 demo 程序
> reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
> update # 重启配置文件修改过的程序
> reload # 重新启动配置中的所有程序
启动
可以将 supervisor 设置为跟随系统启动,如 Linux 启动时会执行 /etc/rc.local 脚本,添加启动命令
supervisord -c /etc/supervisor/supervisord.conf
使用supervisor实现进程管理相关推荐
- Linux运维工具Supervisor(进程管理工具)
文章目录 一.介绍 二.自带Web管理程序 三.安装 1.安装 2.源码安装 3.yum安装 四.配置文件 五.启动 六.设置开机启动 七.查看 supervisord 是否在运行 八.supervi ...
- supervisor - Python进程管理工具
supervisor是用 pathon写的一个工具,是比较好的服务管理工具,一个很重要的功能就是监控服务器主要服务,并且在出现问题时进行重启 1.安装 ubuntu下使用apt-get安装 apt-g ...
- Supervisor 进程管理工具
简介: Supervisor 进程管理工具 一.安装 shell > yum -y install python-pipshell > pip install supervisor# 这样 ...
- linux 守护进程管理 supervisor 简介 可用于docker容器内守护进程
一.supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启.它是通过fork/e ...
- Supervisor进程管理开机自启
这几天在用supervisor管理爬虫和Flask, 每次都记不住命令,花点时间记录下. supervisor是一个进程管理工具,用来启动.停止.重启和监测进程.我用这个东西主要用来监测爬虫和Flas ...
- python supervisor_python之supervisor进程管理工具
supervisor是python写的一个管理进程运行的工具,可以很方便的监听.启动.停止.重启一个或多个进程:有了supervisor后,就不用字节写启动和监听的shell脚本了,非常方便. sup ...
- docker supervisor进程管理
博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.使用 Supervisor 来管理进 ...
- supervisor进程管理工具
2019独角兽企业重金招聘Python工程师标准>>> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...
- python怎么打开程序管理器_Python 进程管理工具 Supervisor 使用教程
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 进程管理工具 Supervisor 使用教程 Supervisor ...
最新文章
- Spring从菜鸟到高手(四)(上)使用JdbcTemplate类实现用户登陆验证、批量更新
- Sql Server使用链接服务器远程取数据!
- PMCAFF公选了最美咖友,结果却是……
- vue项目的一些需要注意到的细节
- C php反序列化,php反序列化漏洞 - anansec的个人空间 - OSCHINA - 中文开源技术交流社区...
- kis显示用户登录服务器失败,金蝶KIS专业版提示用户KISAdmin登陆失败。原因:未与信任SQL Server连接相关联...
- 你觉得sql有多难?
- PDF区域文本提取工具
- dubbo教程(绝对的入门到入土)
- jq-ui的Sortable插件 两列布局 左右拖拽
- Fisher判别式(LDA)
- 联想T440怎么把原装Win8或Win10换成Win7系统
- r语言plotmds_科学网—在R中运行metaMDS - 梅卫平的博文
- matlab曲线拟合 函数 用法以及例子
- 二维数组vector 限定大小
- 移动端web总结(二)——微金所项目总结
- SQL行列转置,汇总再揭
- ROS2学习笔记27--实现自定义内存分配器
- PHP 将amr音频文件转换为mp3格式
- 2011国信蓝点杯全国软件设计大赛
热门文章
- ajax.updater 返回值,jquery中Ajax.updater的等价物是什么?
- html a 下划线
- java switch语句-for循环讲解
- tomcat7.x 点击\bin\tomcat7.exe一闪而过,点击tomcat7w.exe提示未安装服务
- System Verilog约束块(constrain block)控制和随机变量的随机属性控制
- h5调用android录音,html5网页录音插件Recorder
- 单片机出现正在检测目标单片机问题解决办法
- 自动驾驶中的Scene, Situation和Scenario的定义与补充
- docker重启后启动失败Failed to start Docker Application Container Engine.
- java数据结构 农夫过河_数据结构笔记分享:18 农夫过河(图的算法运用)