Supervisor

Supervisor

supervisor简介

supervisor是一个管理进程的工具,python语言开发的通用的管理程序,可以管理和监控Linux上的进程,能将进程变成后台的daemon,并监控进程状态,出现异常退出时能自动重启。

保持程序在后台的服务器上保持运行状态,是实际生产环境中常需要的需求,避免后台进程崩溃,频繁手动重启程序十分费事,疏忽大意也会使程序得不到监控,supervisor是一个很好的选择。

supervisor组件

  • supervisord
    supervisor的服务器端部分,启动supervisor就是运行这个命令
  • supervisorctl
    启动supervisor的命令行窗口
  • Web Server
    提供web接口进行访问控制
  • XML-RPC interface

supervisor安装

Linux下安装命令
pip install supervisor

生成supervisor配置文件
echo_supervisord_conf > supervisor.conf
系统会生成/etc/supervisord.conf 默认文件,在这个配置文件里有有英文注释,很人性化。每个组件部分都有自己的参数设置。在supervisor /etc/supervisord.conf 配置文件中 使用 include在配置文件的最后,有一个 [include] 的配置项,跟 Nginx 一样,可以 include 某个文件夹下的所有配置文件,
这样我们就可以为每个进程或相关的几个进程的配置单独写成一个文件。

对于要监控的程序配置文件,样板如下

270 ;[program:theprogramname]
271 ;command=/bin/cat              ; the program (relative uses PATH, can take args)
272 ;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
273 ;numprocs=1                    ; number of processes copies to start (def 1)
274 ;directory=/tmp                ; directory to cwd to before exec (def no cwd)
275 ;umask=022                     ; umask for process (default None)
276 ;priority=999                  ; the relative start priority (default 999)
277 ;autostart=true                ; start at supervisord start (default: true)
278 ;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
279 ;startretries=3                ; max # of serial start failures when starting (default 3)
280 ;autorestart=unexpected        ; when to restart if exited after running (def: unexpected)
281 ;exitcodes=0,2                 ; 'expected' exit codes used with autorestart (default 0,2)
282 ;stopsignal=QUIT               ; signal used to kill process (default TERM)
283 ;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
284 ;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
285 ;killasgroup=false             ; SIGKILL the UNIX process group (def false)
286 ;user=chrism                   ; setuid to this UNIX account to run the program
287 ;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
288 ;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
289 ;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
290 ;stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)
291 ;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
292 ;stdout_events_enabled=false   ; emit events on stdout writes (default false)
293 ;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
294 ;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
295 ;stderr_logfile_backups=10     ; # of stderr logfile backups (0 means none, default 10)
296 ;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
297 ;stderr_events_enabled=false   ; emit events on stderr writes (default false)
298 ;environment=A="1",B="2"       ; process environment additions (def no adds)
299 ;serverurl=AUTO                ; override serverurl computation (childutils)
300 
301 ; The sample eventlistener section below shows all possible eventlistener
302 ; subsection values.  Create one or more 'real' eventlistener: sections to be
303 ; able to handle event notifications sent by supervisord.

(其中分号’;'表示注释)
这个就是supervisord.conf 文件的内容,是不是有些太多了。

我在实际应用也只用了其中一部分

[program:myapp]      ;myapp 是supervisor监管的程序名称
;directory=/home/        ;运行程序所在的目录
command=python3 /home/myapp.py   ;启动所要监控的程序的命令
;autostart=true   ;程序随着supervisor启动而自动启动
autorestart=truestartsecs = 5   ;异常后程序自动重启的次数
autorestart =  true    ;程序崩溃后是否自动重启
startretries = 50       ;允许重启失败多少次
user = root   
redirect_stderr = true
stdout_logfile_maxbytes = 30MB
stdout_logfile_backups = 5
stdout_logfile = /data/logs/supervisor/myapp_stdout.log  ; 输出日志的文件路径
stderr_logfile = /data/logs/supervisor/myapp_err.log

其它部分的设置可以默认。

常用命令

supervisord -c supervisord.conf                             配置完supervisord.conf通过配置文件启动supervisor
supervisorctl -c supervisord.conf status                    察看supervisor的状态
supervisorctl -c supervisord.conf reload                    重新载入 修改后的配置文件
supervisorctl -c supervisord.conf start [all]|[appname]     启动指定/所有 supervisor管理的程序进程
supervisorctl -c supervisord.conf stop [all]|[appname]      关闭指定/所有 supervisor管理的程序进程

通过supervisorctl命令进入到命令行端口,可以就可以查看监管的进程状态了。使用statusstartstop等命令操作。

修改supervisor中的配置文件的,避免在/temp/supervisor.log 下存放文件,避免被linux系统删除,应该修改存放的路径。
参考链接:https://blog.csdn.net/woshixiaosimao/article/details/54315258

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值