Linux下进程守护Supervisor搭建

简介: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

Linux下进程守护Supervisor搭建_第1张图片

安装完成后,输入 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 文件,添加以下内容:

Linux下进程守护Supervisor搭建_第2张图片

 4.3 启动 supervisord

supervisord -c /usr/supervisor/supervisord.conf

4.4 查看监听

lsof -i:9001

到这一步,就可以通过 http://localhost:9001/ 查看 supervisor 的web界面了,只不过目前还没有加入任何监控程序。

 Linux下进程守护Supervisor搭建_第3张图片

新创建的虚拟机没有安装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

查看日志文件:

Linux下进程守护Supervisor搭建_第4张图片

4.5 supervisord进程管理

supervisorctl -c /usr/supervisor/supervisord.conf

输入supervisor> reload | stop | start | statusLinux下进程守护Supervisor搭建_第5张图片

 

 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

查看进程:

Linux下进程守护Supervisor搭建_第6张图片

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 才会生效。

你可能感兴趣的:(linux,运维,服务器)