supervisor部署及实现进程自动恢复

介绍

supervisor 是基于python 开发的一个linux/unix进程管理工具,可以很方便地实现进程的监听、启动、停止和重启操作。尤其是针对一些意外中断的进程,利用supervisor使其实现自动重启变得极为方便。


1. 安装

1.1. python 环境安装

supervisor 是基于python 开发,需要提前安装python 环境,不过现在的centos 7 都是自带安装了python2.x


查看python 版本


python --version


1.2. 安装pip 工具包

安装pip


yum install python-pip

pip --version

pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)


升级到最高版本

pip install --upgrade pip


安装一个包试试


pip install paramiko


1.3. 安装supervisor


pip install supervisor
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting supervisor
Downloading supervisor-4.2.1-py2.py3-none-any.whl (738 kB)
|████████████████████████████████| 738 kB 350 kB/s
Installing collected packages: supervisor
Successfully installed supervisor-4.2.1



1.4. 配置 supervisor

supervisor 是c/s程序,server 端即supervisord,客户端即supervisorctl 和我们需要管理的应用程序。


创建配置文件路径:


mkdir -p /etc/supervisor


生成配置文件


echo_supervisord_conf > /etc/supervisor/supervisord.conf


vim supervisord.conf


在文件最后开启如下配置,即表示supervisord 会监控此文件路径下所有的.ini文件,每一个.ini文件代表着一个supervisorctl 客户端进程


[include]


files = /etc/supervisor/config.d/*.ini


配置一个客户端进程


mkdir -p /etc/supervisor/config.d

vim /etc/supervisor/config.d/hello.ini


做如下配置,分别表示需要被管理的进程和日志输出路径


#项目名称

[program:hello]#项目路径directory=/root

#脚本指令

command=/root/hello.sh stderr_logfile=/tmp/test_stderr.log stdout_logfile=/tmp/test_stdout.log



1.5. 测试 supervisor

建一个测试脚本


vim /root/hello.sh


#!/usr/bin/bash

while true;do

echo "hello" `date`

sleep 2s

done

添加执行权限 chmod 755 /root/hello.sh


启动 supervisor server端


supervisord -c /etc/supervisor/supervisord.conf


查看日志


ll /tmp/
total 12
-rw-------. 1 root root 0 Oct 10 13:50 hello-stderr---supervisor-kqR6Jr.log
-rw-------. 1 root root 1120 Oct 10 13:51 hello-stdout---supervisor-RZ9Onz.log
drwxr-xr-x. 2 root root 69 Oct 9 15:26 hsperfdata_root
-rw-rw-r--. 1 root root 1384 Oct 10 13:50 supervisord.log
-rw-r--r--. 1 root root 5 Oct 10 13:50 supervisord.pid
srwx------. 1 root root 0 Oct 10 13:50 supervisor.sock


1.6.测试

通过 ps -ef|grep "hello.sh" 查看到进程号,然后kill 掉该进程,确认此进程是否会自动重启


1.7. 开启 supervisor webUI

vim /etc/supervisor/supervisord.conf


重启

supervisorctl reload

登录web ,输入账号密码


qrcode