简介:Supervisor是在linux上的进程管理员,是一个管理工具。当进程停止的时候Supervisor能够自动启动它,可以运行在各种类unix的机器上,supervisor是使用python开发的一套通用的进程管理工具,能够把普通脚本、命令行进程变成后台的daemon,并监控状态,实现自动重启,并提供可视化管理界面。
背景:自动化管理进程、高并发测试、运维环境搭建。
一、运行环境:
Windows下 VMware/Ubuntu-20 x64 系统
python:系统自带的 Python 3.8.10
php:php-7.4(可以不用装php,仅用来测试)
二、安装程序:
1、安装 setuptools。setuptools用来管理python的包依赖,是python distutisde工具的增强包。python3.8是环境中安装的版本。
在 Python编程语言的 软件仓库 搜索下载setuptools:
sudo wget https://files.pythonhosted.org/packages/fd/53/e5d7ae40d03e4ed20b7cba317cf9c0c97097c8debb39f9d72d182a6578a2/setuptools-67.7.2.tar.gz
sudo tar zxvf setuptools-67.7.2.tar.gz
cd setuptools-67.7.2
sudo python setup.py build
sudo python setup.py install
sudo apt-get install python3.8-distutils
2、使用 get-pip 安装 pip。(有时下载比较慢可能会失败,过会儿重试几次。)
sudo wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
安装完成后,输入 pip --version 查看版本。
3、安装 Supervisor。
sudo pip install supervisor supervisor
安装完成后,输入 echo_supervisord_conf 查看安装结果。
三、Supervisor 软件配置
1、创建目录,初始化配置文件
sudo mkdir /usr/supervisor
sudo chmod -R 777 /usr/supervisor
sudo echo_supervisord_conf > /usr/supervisor/supervisord.conf
2、为了便于管理,创建文件夹单独存放每个进程管理配置
sudo mkdir /usr/supervisor/supervisord.d/
3、修改系统配置文件
sudo vim /usr/supervisor/supervisord.conf
3.1 包含上一步 supervisord.d/ 文件夹的所有配置
[include]
files = /usr/supervisor/supervisord.d/*.conf
3.2 去掉 [inet_http_server] 的注释,启用 web 进程管理器
4、添加进程管理配置
4.1 添加第一个配置(单进程)
cd /usr/supervisor/supervisord.d
sudo touch supervisor_test_one.conf
sudo chmod 777 supervisor_test_one.conf
sudo vim supervisor_test_one.conf
添加一下内容:
[program:test_one]
command=php /www/html/test/one.php ; 被监控的进程路径
priority=1 ; 数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
4.2 编写一个测试脚本,创建 /www/html/test/ 目录并创建 one.php 文件,添加以下内容:
<?php
$id = time();
while(1){
file_put_contents('/www/html/test/logs.txt','task-one:'.$id .' - '.date('Y-m-d H:i:s').PHP_EOL,FILE_APPEND);
sleep(1);
}
?>
4.3 启动 supervisord
supervisord -c /usr/supervisor/supervisord.conf
4.4 查看监听
lsof -i:9001
到这一步,就可以通过 http://localhost:9001/ 查看 supervisor 的web界面了,只不过目前还没有加入任何监控程序。
新创建的虚拟机没有安装php,安装一下:
sudo apt install php
4.5 重启 supervisord 进程
查看进程 lsof -i:9001
Kill进程 kill -9 15500
启动进程 supervisord -c /usr/supervisor/supervisord.conf
supervisord -c /usr/supervisor/supervisord.conf
查看日志文件:
4.5 supervisord进程管理
supervisorctl -c /usr/supervisor/supervisord.conf
输入supervisor> reload | stop | start | status
4.6 多进程配置
同级目录下创建 supervisor_test_two.conf 文件,输入以下内容:
[program:test_two]
command=php /www/html/test/one.php ; 被监控的进程路径
priority=1 ; 数字越高,优先级越高
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
numprocs=40 ; 启动几个进程
process_name=进程名称-%(process_num)d ; numprocs>1必须设置不同的进程名
supervisorctl -c /usr/supervisor/supervisord.conf
输入supervisor> reload
输入 supervisor> start all
查看进程:
4.7 更多例子
;tms 默认 default mq配置服务器tms.ordersys.hexiao.queue队列消费脚本进程管理
[program:MqReceive-default-tms.ordersys.hexiao.queue]
command=/usr/bin/php /mnt/TMS2/appdal1/index.php /tracksys/console/MqReceive/run default tms.ordersys.hexiao.queue
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/home/wwwlogs/supervisor_hexiao_stdout.log
stderr_logfile=/home/wwwlogs/supervisor_hexiao_stderr.log
numprocs=6
process_name=MqReceive-default-tms.ordersys.hexiao.queue-%(process_num)d
注意:
(1)numprocs 表示启动进程数,当numprocs>1时,必须给每个进程设置不同的进程名称,所以此处设置 process_name=进程名称-%(process_num)d。
(2)修改配置后 必须执行 supervisor> relaod 才会生效。