python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python supervisor使用

python进程管理工具supervisor安装使用

作者:学无止境gwx

supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程,本文给大家介绍python进程管理工具supervisor安装使用配置教程,感兴趣的朋友一起看看吧

1、概述

supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制。

2、架构:三大构成要素

supervisor的服务端:运行supervisor时会启动一个进程supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启

supervisor的客户端:supervisorctl是命令行管理工具,可以用命令来进行子进程的管理,supervisorctl常见命令

命令含义
supervisorctl status查看所有子进程服务状态
supervisorctl restart重启所有子进程服务
supervisorctl restart name重启子进程名字为name的服务
supervisorctl start name开启子进程名字为name的服务
supervisorctl stop all关闭所有子进程服务
supervisorctl stop name停止子进程名字为name的服务
supervisorctl shutdown关闭所有子进程服务
supervisorctl reload重载配置文件,重启所有子进程服务
supervisorctl update更新所有服务,一般用在添加新服务后
supervisorctl update name更新子进程名字为name服务

默认的配置文件,一般生成默认文件为 supervisor.conf

3、安装

3.1、supervisor是基于python写的,所以使用pip来安装即可。

pip install supervisor

3.2、默认生成的几个地址需要我们关注

# supervisord 路径
/usr/local/bin/supervisord
# supervisorctl 路径
/usr/local/bin/supervisorctl
# echo_supervisord_conf 路径
/usr/local/bin/echo_supervisord_conf

如上路径,我们也可以通过 whereis supervisord whereis supervisorctl whereis echo_supervisord_conf 得到

3.3、验证是否安装成功

supervisorctl --help

4、配置

4.1、创建 /etc/supervisor 目录

mkdir /etc/supervisor

​​​​​​​4.2、创建并修改supervisord.conf文件

echo_supervisord_conf > /etc/supervisor/supervisord.conf

vi /etc/supervisor/supervisord.conf

# 将unix_http_server 下的 file 路径改成如下内容
[unix_http_server] 
file=/var/run/supervisor.sock  ; (the path to the socket file)
# 将supervisord 下的logfile 路径 和 pidfile 路径改成如下内容
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file; default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile; default supervisord.pid)
[supervisorctl] 
serverurl=unix:///var/run/supervisor.sock ; (use a unix:// URL  for a unix socket)
# 将include 取消注释并将其下的 files 路径改成如下内容。标记着supervisor将会默认运行/etc/supervisor/conf.d的所有conf配置文件
[include]
files = /etc/supervisor/conf.d/*.conf

注:上面的路径只是推荐路径,你也可以根据自己的想法,指向不同路径

4.3、创建并添加文件权限(上文提到的)

# 创建文件
#touch /var/run/supervisor.sock  # 依据配置文件自动创建
mkdir /var/log/supervisor
touch /var/log/supervisor/supervisord.log
#touch /var/run/supervisord.pid  # 依据配置文件自动创建
mkdir /etc/supervisor/conf.d
# 添加权限
#chmod 777 /var/run 
#chmod 777 /var/log

4.4、配置supervisor开机自动启动服务(非必须,按需选择)

4.4.1、编辑文件(一般自带,不需要配置) vim /usr/lib/systemd/system/supervisord.service supervisord.service 文件内容如下:

[Unit] 
Description=Supervisor daemon 
[Service] 
Type=forking ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf 
ExecStop=/usr/local/bin/supervisorctl shutdown 
ExecReload=/usr/local/bin/supervisorctl reload 
KillMode=process Restart=on-failure 
RestartSec=42s 
[Install] 
WantedBy=multi-user.target

4.4.2、使能服务 systemctl enable supervisord

​​​​​​​4.4.3、验证是否使能成功

方法一,出现enable说明成功

systemctl is-enabled supervisord

​​​​​​​方法二,开关机验证

注:supervisor常用命令

命令含义
service supervisord start启动supervisor服务
service supervisord stop停止supervisor服务
service supervisord status查看supervisor状态

5、如何配置新服务并系统控制?

假设服务名称为test。启动文件为py类文件entry.py

5.1、创建test.conf并编辑配置文件

vi /etc/supervisor/conf.d/test.conf

[program:test]  # 服务名称test
directory = /home/test_project        # 项目路径,项目运行前,会先切换到这个目录
command= /home/test_project/entry.py  # 程序入口主文件绝对路径 
autostart=true                        # 如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true 
autorestart=true                      # 子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。false表示无论什么情况下,都不会被重新启动;unexpected表示只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启 
user=root                             # root用户执行 
redirect_stderr=true                  # 将stderr重定向stdout,默认false,与stderr_logfile互斥
startsecs = 5                         # 子进程启动多少秒之后,此时状态如果是running,我们认为启动成功了,默认值1
startretries=5                        # 当进程启动失败后,最大尝试的次数。当超过5次后,进程的状态变为FAIL
stdout_logfile = None                 # 正常日志输出文件,None表示不输出
stderr_logfile = None                 # 错误日志输出文件,None表示不输出

5.2、使用supervisorctl客户端查看程序启动的状态前需要先启动supervisor服务(使用supervisord)

supervisord -c /etc/supervisor/supervisord.conf  # 启动supervisor服务
# 如果出现
supervisorctl -c /etc/supervisor/supervisord.conf status  # 查看程序启动的状态

6、便捷

6.1、如上所示,下载supervisor后,启动项目需要以下几个步骤:

而此时是有一个更好的方法,将①④合到一处。①中只关注重要的一些选项。④中照搬即可 vi /etc/supervisor/conf.d/test.conf

[unix_http_server]
file=/var/run/supervisor.sock  ; (the path to the socket file)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file; default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile; default supervisord.pid)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; (use a unix:// URL  for a unix socket)
[include]
files = /etc/supervisor/conf.d/*.conf
[program:test]  # 服务名称test
directory = /home/test_project        # 项目路径,项目运行前,会先切换到这个目录
command= /home/test_project/entry.py  # 程序入口主文件绝对路径 
autostart=true                        # 如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true 
autorestart=true                      # 子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。false表示无论什么情况下,都不会被重新启动;unexpected表示只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启 
user=root                             # root用户执行 
redirect_stderr=true                  # 将stderr重定向stdout,默认false,与stderr_logfile互斥
startsecs = 5                         # 子进程启动多少秒之后,此时状态如果是running,我们认为启动成功了,默认值1
startretries=5                        # 当进程启动失败后,最大尝试的次数。当超过5次后,进程的状态变为FAIL
stdout_logfile = None                 # 正常日志输出文件,None表示不输出
stderr_logfile = None                 # 错误日志输出文件,None表示不输出

6.2、此时需要做的步骤

到此这篇关于python进程管理工具supervisor安装使用的文章就介绍到这了,更多相关python supervisor使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文