Supervisor是一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。
提供的高可用场景,当你的程序出现异常,例如core/内存溢出等,导致服务进程被杀死,这个时候supervisort监听到进程终止后,会自动将它重新拉起。
1、通过apt-get直接安装
apt-get install supervisor
2、pip安装
pip install supervisor
3、easy_install安装
easy_install supervisor
supervisor是一个C/S架构的工具。安装完成后,会生成三个执行程序:
1)supervisortd:守护进程服务(用于接收进程管理命令)
2)supervisorctl:客户端(用于和守护进程通信,发送管理进程的指令)
3)echo_supervisord_conf:生成初始配置文件程序
运行echo_supervisord_conf命令输出默认的配置项,可以如下操作将默认配置保存到文件中
echo_supervisord_conf > supervisord.conf
vim 打开编辑supervisord.conf文件,修改
[include]
files = relative/directory/*.ini
为
[include]
files = /etc/supervisor/*.conf
include选项指明包含的其他配置文件。
将编辑后的supervisord.conf文件复制到/etc/目录下
sudo cp supervisord.conf /etc/
然后在/etc目录下新建子目录supervisor(与配置文件里的选项相同),并在/etc/supervisor/中新建需要管理的配置文件xxx.conf。
[program:test_one]
command=python3 /home/dgw/Desktop/test/text.txt; 被监控的进程路径
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=python3 /home/dgw/Desktop/test/text2.txt; 被监控的进程路径
priority=1 ; 数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
注意:要对上面编辑的文件添加可操作权限:chmod +x xxx.conf
supervisord -c /etc/supervisord.conf
查看 supervisord 是否在运行:
ps aux | grep supervisord
利用supervisorctl来管理supervisor。
supervisorctl
> status # 查看程序状态
> start apscheduler # 启动 apscheduler 单一程序
> stop toutiao:* # 关闭 toutiao组 程序
> start toutiao:* # 启动 toutiao组 程序
> restart toutiao:* # 重启 toutiao组 程序
> update # 重启配置文件修改过的程序
执行status命令时,显示如下信息说明程序运行正常:
supervisor> status
toutiao:toutiao-app RUNNING pid 32091, uptime 00:00:02
此时没有是说明没有权限,在命令前面加上sudo就可以啦!
启动一个程序进程: 【directory此时亲测不起作用】
[program:Elasticsearch]
command=/home/admin/es/elasticsearch-7.17.6/bin/elasticsearch; 被监控的进程路径
priority=1 ; 数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
stdout_logfile=logs/es/stdout.log
stderr_logfile=logs/es/strerr.log
注意容易错误的地方:
注意1: 【这种写法只是可能有问题,还要更加python程序决定】
注意2:
异常报错参考链接:
supervisor出现的错误_qq_38375394的博客-CSDN博客
supervisor启动报错Unlinking stale socket /tmp/supervisor、unix:/run/supervisor/supervisor.sock no such fi_wd520521的博客-CSDN博客