去年做一个项目,涉及大量脚本操作,然后了解到了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实现进程管理相关推荐

  1. Linux运维工具Supervisor(进程管理工具)

    文章目录 一.介绍 二.自带Web管理程序 三.安装 1.安装 2.源码安装 3.yum安装 四.配置文件 五.启动 六.设置开机启动 七.查看 supervisord 是否在运行 八.supervi ...

  2. supervisor - Python进程管理工具

    supervisor是用 pathon写的一个工具,是比较好的服务管理工具,一个很重要的功能就是监控服务器主要服务,并且在出现问题时进行重启 1.安装 ubuntu下使用apt-get安装 apt-g ...

  3. Supervisor 进程管理工具

    简介: Supervisor 进程管理工具 一.安装 shell > yum -y install python-pipshell > pip install supervisor# 这样 ...

  4. linux 守护进程管理 supervisor 简介 可用于docker容器内守护进程

    一.supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启.它是通过fork/e ...

  5. Supervisor进程管理开机自启

    这几天在用supervisor管理爬虫和Flask, 每次都记不住命令,花点时间记录下. supervisor是一个进程管理工具,用来启动.停止.重启和监测进程.我用这个东西主要用来监测爬虫和Flas ...

  6. python supervisor_python之supervisor进程管理工具

    supervisor是python写的一个管理进程运行的工具,可以很方便的监听.启动.停止.重启一个或多个进程:有了supervisor后,就不用字节写启动和监听的shell脚本了,非常方便. sup ...

  7. docker supervisor进程管理

    博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.使用 Supervisor 来管理进 ...

  8. 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 ...

  9. python怎么打开程序管理器_Python 进程管理工具 Supervisor 使用教程

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 进程管理工具 Supervisor 使用教程 Supervisor ...

最新文章

  1. Spring从菜鸟到高手(四)(上)使用JdbcTemplate类实现用户登陆验证、批量更新
  2. Sql Server使用链接服务器远程取数据!
  3. PMCAFF公选了最美咖友,结果却是……
  4. vue项目的一些需要注意到的细节
  5. C php反序列化,php反序列化漏洞 - anansec的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. kis显示用户登录服务器失败,金蝶KIS专业版提示用户KISAdmin登陆失败。原因:未与信任SQL Server连接相关联...
  7. 你觉得sql有多难?
  8. PDF区域文本提取工具
  9. dubbo教程(绝对的入门到入土)
  10. jq-ui的Sortable插件 两列布局 左右拖拽
  11. Fisher判别式(LDA)
  12. 联想T440怎么把原装Win8或Win10换成Win7系统
  13. r语言plotmds_科学网—在R中运行metaMDS - 梅卫平的博文
  14. matlab曲线拟合 函数 用法以及例子
  15. 二维数组vector 限定大小
  16. 移动端web总结(二)——微金所项目总结
  17. SQL行列转置,汇总再揭
  18. ROS2学习笔记27--实现自定义内存分配器
  19. PHP 将amr音频文件转换为mp3格式
  20. 2011国信蓝点杯全国软件设计大赛

热门文章

  1. ajax.updater 返回值,jquery中Ajax.updater的等价物是什么?
  2. html a 下划线
  3. java switch语句-for循环讲解
  4. tomcat7.x 点击\bin\tomcat7.exe一闪而过,点击tomcat7w.exe提示未安装服务
  5. System Verilog约束块(constrain block)控制和随机变量的随机属性控制
  6. h5调用android录音,html5网页录音插件Recorder
  7. 单片机出现正在检测目标单片机问题解决办法
  8. 自动驾驶中的Scene, Situation和Scenario的定义与补充
  9. docker重启后启动失败Failed to start Docker Application Container Engine.
  10. java数据结构 农夫过河_数据结构笔记分享:18 农夫过河(图的算法运用)