Linux安装部署进程管理工具 supervisor.

部署任务上线,一直用nohup肯定是不行的,作为不专业的运维起码要会用一些进程管理工具,这次我用的是Python开发的supervisor【话说给我几个月,我也能开发出来。。。】

这是github的地址:https://github.com/Supervisor/supervisor

这是官方的使用介绍::http://supervisord.org/

下面我写一些自己的简单记录,方便我以后使用,参考链接就不上了,百度出来的,基本比较杂乱。

首先本人是通过pip install supervisor的方式进行安装,非通过yum或apt安装,但具体使用差不多。

装好以后可以使用命令:echo_supervisord_conf如果有一堆配置信息输出,这就正确了。

这个里面有所有的服务器以及任务的相关配置。

插入一下,supervisor有两个可执行的Python文件

/root/anaconda3/bin/supervisord     这个是启动文件

/root/anaconda3/bin/supervisorctl    这个是控制文件

 

需要通过echo_supervisord_conf的输出,导出到指定的/etc/supervisord.conf下面,其实导出到哪里都可以,这是给supervisord使用的配置文件。

这里务必要注意修改里面的

[include]

files = supervisord.d/*.conf

这个是启动supervisor后,管理子进程配置文件的地方,文件的后缀名随便你,网上有conf或者ini无所谓。

配置文件网上有很多,也可以直接参考echo_supervisord_conf的输出情况。

 

配置好,就可以通过supervisord -c /etc/supervisord.conf运行改进程。

 

常用supervisorctl命令

supervisorctl status    查看当期进程状态
supervisorctl stop <name>  停止一个进程
supervisorctl start <name>  启动
supervisorctl restart <name> 重启
supervisorctl reload     重启supervisord主进程

 

supervisorctl 常用命令

查看任务状态:supervisorctl status

启动任务:supervisorctl start <name>

停止任务:supervisorctl stop <name>

重启任务:supervisorctl restart <name>

清除日志文件:supervisorctl  clear <name>

清除多个日志文件:supervisorctl  clear <name> <name> 

清除所有日志文件:supervisorctl  clear all 

移除任务:supervisorctl  remove <name>

下面是我复制百度上面相关信息,开机自动启动supervisord的操作

在目录/usr/lib/systemd/system/ 新建文件supervisord.service,并添加配置内容

[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /usr/supervisor/supervisord.conf ;开机启动时执行
ExecStop=/usr/bin/supervisord shutdown ; 这里面我都进行了修改
ExecReload=/usr/bin/supervisord reload  ; 根据自身情况修改
killMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

启动服务:systemctl enable supervisord

验证是否开机启动:systemctl is-enabled supervisord

配置文件,参考的链接:https://www.cnblogs.com/toutou/p/supervisor.html

3.2 增加一个配置文件,以便supervisor用来监控程序

cat > /usr/supervisor/supervisord.d/supervisor_test_one.conf

在新建的supervisor_test_one.conf文件中添加以下配置

复制代码
[program:test_one]
command=java -jar /data/smallvideo/supervisor/taskApp-exec.jar TaskTestOne  ; 被监控的进程路径
priority=1                    ; 数字越高,优先级越高
numprocs=1                    ; 启动几个进程
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                   ; 正常退出代码
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
redirect_stderr=true          ; 重定向stderr到stdout

[program:test_two]
command=java -jar /data/smallvideo/supervisor/taskApp-exec.jar TaskTestTwo   ; 被监控的进程路径
priority=1                    ; 数字越高,优先级越高
numprocs=1                    ; 启动几个进程
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                   ; 正常退出代码
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
redirect_stderr=true          ; 重定向stderr到stdout
复制代码

3.3 supervisor配置文件详解

详解Supervisor进程守护监控
复制代码
- command:启动程序使用的命令,可以是绝对路径或者相对路径
- process_name:一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s
- numprocs:Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1
- numprocs_start:一个int偏移值,当启动实例的时候用来计算numprocs的值
- priority:权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999
- autostart:如果设置为true,当supervisord启动的时候,进程会自动重启。
- autorestart:值可以是false、true、unexpected。false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候。
- startsecs:程序启动后等待多长时间后才认为程序启动成功
- startretries:supervisord尝试启动一个程序时尝试的次数。默认是3
- exitcodes:一个预期的退出返回码,默认是0,2。
- stopsignal:当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。
- stopwaitsecs:在操作系统给supervisord发送SIGCHILD信号时等待的时间
- stopasgroup:如果设置为true,则会使supervisor发送停止信号到整个进程组
- killasgroup:如果设置为true,则在给程序发送SIGKILL信号的时候,会发送到整个进程组,它的子进程也会受到影响。
- user:如果supervisord以root运行,则会使用这个设置用户启动子程序
- redirect_stderr:如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符。
- stdout_logfile:把进程的标准输出写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会自动选择一个文件位置。
- stdout_logfile_maxbytes:标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
- stdout_logfile_backups:标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份
- stdout_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
- stdout_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
- stderr_logfile:把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为true
- stderr_logfile_maxbytes:错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
- stderr_logfile_backups:错误日志轮转备份的数量,默认是10,如果设置为0,则不备份
- stderr_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
- stderr_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
- environment:一个k/v对的list列表
- directory:supervisord在生成子进程的时候会切换到该目录
- umask:设置进程的umask
- serverurl:是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url
复制代码

监控demotest程序示例:

复制代码
[program:demotest]
command=python demotest.py 10000  ; 被监控的进程启动命令
directory=/root/                ; 执行前要不要先cd到目录去,一般不用
priority=1                    ;数字越高,优先级越高
numprocs=1                    ; 启动几个进程
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启。。当然要选上了
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                   ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
redirect_stderr=true          ; 重定向stderr到stdout
原文地址:https://www.cnblogs.com/sidianok/p/14627596.html