Supervisor进程管理与开机自动启动
简介
Supervisor是一个客户端/服务器系统,允许其用户控制类似UNIX的操作系统上的许多进程。
Supervisor已经过测试,可以运行在Linux(Ubuntu),Mac OS X(10.4、10.5、10.6)和Solaris(对于Intel为10)和FreeBSD 6.1上。在大多数UNIX系统上,它可能会正常工作。
Supervisor完全不会在任何Windows版本下运行。
Supervisor旨在在Python 3版本3.4或更高版本以及Python 2版本2.7上工作。
该过程在Ubuntu18.04下进行,其他版本相似
1.Supervisor安装
- 推荐安装方式
sudo apt-get install supervisor
- yum源安装
yum install supervisor
- pip安装
pip install supervisor
查看是否安装成成功
echo_supervisord_conf
出现以下内存则安装成功
2.Supervisor配置
初始化配置文件
- 创建自己的配置文件
mkdir /usr/supervisor
- 此时需要将创建好的supervisor文件夹授权
sudo chmod -R 777 supervisor
- 拷贝配置文件修改
echo_supervisord_conf > /usr/supervisor/supervisord.conf
管理配置文件
这里可以在/usr/supervisor/supervisord.conf文件后面追加,也可以另外写(推荐另外写)
- 新建配置文件文件夹
mkdir /usr/supervisor/supervisord.d/
- 读取配置文件夹下所有.conf文件
将/usr/supervisor/supervisord.conf文件中的以下部分取消注释(使用分号";"注释)
[include]
files = /usr/supervisor/supervisord.d/*.conf
为每一个需要管理的进程设置配置文件
例如:要启动的进程为home/user/test.sh,设置配置文件为
[program:test]
command=bash home/user/test.sh; 启动命令
priority=1 ; 数字越高,优先级越高(对不同进程而言)
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
3.Supervisor使用
- 查看Supervisor是否正在运行
ps -A | grep supervisord
- 启动supervisor并更新supervisor的配置
sudo supervisord -c /usr/supervisor/supervisord.conf
- 杀死supervisor进程
sudo kill [supervisord进程id]
4.Supervisor开机自动启动
- 件/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
5.Supervisor常用命令
supervisorctl status //查看所有进程的状态
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序