MelonBlog

进程控制系统:Supervisor

笔记参考:https://juejin.cn/post/6844903745587773448

周末用了一个运维工具,叫Supervisor,感觉还挺好用的,今天来记录一下怎么使用这个工具。

supervisor是一个unix-like环境下的进程控制系统,用户可以通过它来监控进程,使用起来非常简单。

安装/启动

安装

pip:

pip install supervisor

centos:

yum install supervisor

如果centos提示no urls in mirrorlist,执行下面的命令:

sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
sudo sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*

ubuntu或者debian:

sudo apt update && sudo apt install supervisor

查看是否安装成功

> sudo systemctl status supervisor
● supervisor.service - Supervisor process control system for UNIX
     Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-11-17 22:56:48 UTC; 5min ago

创建配置文件(仅pip安装需要手动生成)

安装完成后通过echo_supervisord_conf 命令输出一个初始化的配置文件

echo_supervisord_conf > /etc/supervisor/supervisord.conf

启动

supervisord

查看状态:

supervisorctl  status

常用命令

reread ;重新加载配置文件
update ;将配置文件里新增的子进程加入进程组,如果设置了autostart=true则会启动新新增的子进程
status ;查看所有进程状态
status <name> ;查看指定进程状态
start all; 启动所有子进程
start <name>; 启动指定子进程
restart all; 重启所有子进程
restart <name>; 重启指定子进程
stop all; 停止所有子进程
stop <name>; 停止指定子进程
reload ;重启supervisord
add <name>; 添加子进程到进程组
reomve <name>; 从进程组移除子进程,需要先stop。注意:移除后,需要使用reread和update才能重新运行该进程

测试

通过一个小demo程序来测试supervisor

在/etc/supervisord.d目录新建一个test.ini

[program:test]
;命令路径
command=/usr/bin/date
;进程数量
numprocs=1
;执行目录
directory=/root
;如果是true,当supervisor启动时,程序将会自动启动
autostart=false
;自动重启
autorestart=true
;当退出码是0,2时,执行重启,默认值0,2
exitcodes=0,2
;启动尝试次数,默认3次
startretries=3
;默认是1,这里因为测试的是date命令,非常快就退出了,所以改成0
startsecs=0
;日志
redirect_stderr=true
stdout_logfile=/root/info.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/root/error.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB

刷新配置:

> supervisorctl reread
test: available
> supervisorctl status
test                             STOPPED   Not started

启动test

> supervisorctl start test
test: started
> tail info.log 
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023
Mon Nov 27 12:48:47 CST 2023

web控制台

修改配置(默认是注释的)

[inet_http_server]         ; inet (TCP) server disabled by default
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)