supervisor安装与配置

15 篇文章 1 订阅

Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

1.supervisor安装

pip install supervisor

2.supervisor配置

2.1.初始化配置文件

mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf

2.2.修改配置文件

配置文件supervisord.conf各字段解释可参考:

https://www.cnblogs.com/toutou/archive/2019/05/03/supervisor.html

[unix_http_server]
;修改file的路径
file=/etc/supervisor/supervisor.sock   ; the path to the socket file
;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)
......
[supervisord]
;修改logfile的路径
logfile=/etc/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
;修改pidfile的路径
pidfile=/etc/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
......
[supervisorctl]
;修改serverurl
serverurl=unix:///etc/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
......
;[include]
;files = relative/directory/*.ini

;下面是新增的
[include]
files = /etc/supervisor/config.d/

2.3.配置进程管理文件

上面的配置文件supervisord.conf是用来管理supervisord进程(父进程)的,而此处的进程管理文件是用来管理被supervisord守护的进程(子进程)的。

mkdir /etc/supervisor/config.d
cd /etc/supervisor/config.d
vim one_name.conf

one_name.conf可以自己取一个名字(后缀名不要改,如果要改,需要改2.2配置文件中的files的值),将以下内容拷贝到one_name.conf中

; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:shse_server]
command=nohup python3 -u zqs.py >/dev/null &   ;启动被守护进程的命令
;numprocs=1                                    ; 默认为1
;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
user=root                 ; 使用 root 用户来启动该进程
; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
autorestart=true
redirect_stderr=true        ; 重定向输出的日志
stdout_logfile = /var/log/supervisord/shse_server.log
loglevel=info

2.4.启动Supervisor服务

# 由于2.3小节配置文件中日志文件存放路径是/var/log/supervisord,故需先创建
mkdir /var/log/supervisord
# 启动supervisor服务
supervisord -c /etc/supervisor/supervisord.conf

2.5.守护多个进程

如果需要守护多个进程,则最简单的方式就是在2.3小节中的配置文件中定义多个program

; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:zqs_server]
command=nohup python3 -u zqs.py >/dev/null &   ;启动被守护进程的命令
;numprocs=1                                    ; 默认为1
;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
user=root                 ; 使用 root 用户来启动该进程
; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
autorestart=true
redirect_stderr=true        ; 重定向输出的日志
stdout_logfile = /var/log/supervisord/zqs_server.log
loglevel=info

; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:zqs2_server]
command=nohup python3 -u zqs2.py >/dev/null &   ;启动被守护进程的命令
;numprocs=1                                    ; 默认为1
;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
user=root                 ; 使用 root 用户来启动该进程
; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
autorestart=true
redirect_stderr=true        ; 重定向输出的日志
stdout_logfile = /var/log/supervisord/zqs2_server.log
loglevel=info

配置完成后,需要更新supervisord

supervisorctl reload

守护多个进程还可以通过group来完成

http://supervisord.org/configuration.html#group-x-section-settings

[group:foo]
programs=bar,baz
priority=999

示例如下

[group:ttt]
programs=zqs_server,zqs2_server
; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:zqs_server]
command=nohup python3 -u zqs.py >/dev/null &   ;启动被守护进程的命令
;numprocs=1                                    ; 默认为1
;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
user=root                 ; 使用 root 用户来启动该进程
; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
autorestart=true
redirect_stderr=true        ; 重定向输出的日志
stdout_logfile = /var/log/supervisord/zqs_server.log
loglevel=info


; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:zqs2_server]
command=nohup python3 -u zqs2.py >/dev/null &   ;启动被守护进程的命令
;numprocs=1                                    ; 默认为1
;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
user=root                 ; 使用 root 用户来启动该进程
; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
autorestart=true
redirect_stderr=true        ; 重定向输出的日志
stdout_logfile = /var/log/supervisord/zqs2_server.log
loglevel=inf

配置完成后,需要更新supervisord

supervisorctl reload

如果需要停止group中的进程

# 停止group:ttt中的所有进程
supervisorctl stop ttt:*
# 停止group:ttt中的某个进程
supervisorctl stop ttt:zqs_server
PS:如果使用group来管理进程,则此时不能用以下命令停止某个进程
supervisorctl stop program_name

3.相关命令

# 启动supervisor
supervisord
# 修改完配置文件后重新启动supervisor
supervisorctl reload
# 查看supervisor监管的进程状态
supervisorctl status
# 启动XXX进程
supervisorctl start program_name
# 停止XXX进程
supervisorctl stop program_name
# 停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl stop all
# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update
# 停止group中所有进程
supervisorctl stop group_name:*
# 停止group中某个进程
supervisorctl stop group_name:program_name

4.安装配置可能出现的错误

Starting supervisor: Unlinking stale socket /etc/supervisor/supervisor.sock

find / -name supervisor.sock
unlink /***/supervisor.sock

将查找到的sock文件都unlink

5.supervisor开机自启动

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

PS:如果没有该路径,则手动创建

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

[Service]
Type=forking
ExecStart=supervisord -c /etc/supervisor/supervisord.conf ;开机启动时执行
ExecStop=supervisord shutdown
ExecReload=supervisord reload
killMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.targe

启动服务

systemctl enable supervisord

验证是否开机自启动

systemctl is-enabled supervisord

出现以下提示信息,则说明开机自启动已设置成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值