Python—守护进程管理工具(Supervisor)
一、前言简介
1、Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程。可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。
2、Supervisor 安装完成之后,可以编写配置文件,来满足自己的需求。为了方便,我们把配置分成两部分:supervisord(这是 server 端,对应的有 client 端:supervisorctl)和应用程序(即我们要管理的程序)。
- supervisord(server 部分):主要负责管理子进程,响应客户端命令以及日志的输出等,受控的监听进程都会以其子进程地方式出现,不过如果supervisord的主进程非正常退出时,被管理的进程仍然是运行状态。
- supervisorctl(client 部分):命令行客户端,用户可以通过它与不同的 supervisord 进程联系,获取子进程的状态等。
3、Supervisord 要求管理的程序是非daemon程序,supervisord 会帮你把它转成daemon程序,因此如果用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动,当然了,redis等亦如是。
二、安装supervisor
1、安装supervisor
[root@localhost ~]# pip install supervisor
2、测试supervisor安装是否成功
[root@localhost ~]# echo_supervisord_conf
3、卸载supervisor
[root@localhost ~]# pip uninstall supervisor
supervisor安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf。分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。
三、配置supervisord
安装 supervisor 完成之后,可以编写配置文件,来满足自己的需求。为了方便,我们把配置分成两部分:supervisord(这是 server 端,对应的 client 端:supervisorctl)和应用程序(即我们要管理的程序)。首先来看 supervisord 的配置文件。
1、通过运行 echo_supervisord_conf 命令生成 supervisor 的初始化配置文件:supervisord.conf(supervisord.conf文件的位置无所谓,这里当作第二个位置)
[root@localhost ~]# echo_supervisord_conf > /etc/supervisord.conf
[root@localhost ~]# echo_supervisord_conf > /etc/supervisor/supervisord.conf
2、启动 supervisord 服务(通过 -c 选项指定配置文件路径,如果不指定会按照这个顺序查找配置文件:$CWD/supervisord.conf, $CWD/etc/supervisord.conf, /etc/supervisord.conf, /etc/supervisor/supervisord.conf):
[root@localhost ~]# supervisord # 默认去找 /etc/supervisord.conf 这个配置文件
[root@localhost ~]# supervisord -c /etc/supervisord.conf # 到指定路径下去找配置文件
[root@localhost ~]# supervisord -c /etc/supervisor/supervisord.conf # 到指定路径下去找配置文件
3、查看 supervisord 服务是否在运行:
[root@localhost ~]# ps aux | grep supervisord
4、查看 supervisord 服务是否生效
[root@localhost ~]# ps -ef | grep ProjectName
四、配置文件参数说明
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700 ;socket文件的mode,默认是0700
;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid ;[inet_http_server] ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001 ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user ;登录管理后台的用户名
;password=123 ;登录管理后台的密码 [supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10 ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024 ;可以打开的文件描述符的最小值,默认 1024
minprocs=200 ;可以打开的进程数的最小值,默认 200 [supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord ; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序启动命令
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=tomcat ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程 ;包含其它配置文件
[include]
files = /www/server/panel/plugin/supervisor/profile/*.ini ;可以指定一个或多个以.ini结束的配置文件
五、配置supervisord开机自启
1.在 /usr/lib/systemd/system/ 目录下面新建文件supervisord.service,并写入如下内容:
[Unit]
Description=Process Monitoring and Control Daemon(Supervisor daemon)
After=rc-local.service nss-user-lookup.target [Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/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
2.启动服务:执行开机启动命令,让 supervisord 服务开机自启。
[root@localhost ~]# systemctl enable supervisord
3.验证一下是否为开机启动。enabled:开机自启。disabled:开机不自启。
[root@localhost ~]# systemctl is-enabled supervisord
4.重启服务器,检查 supervisor 是否启动。
[root@localhost ~]# ps aux | grep supervisor
六、Web管理页面
supervisor提供了可视化的Web管理页面,允许远程操作,但是需要在配置文件中手动打开。可以在网页端访问supervisor服务。
注意:如果是腾讯云或阿里云服务器,需要安全组放行9001端口,才能访问。
# 1.打开配置配件
[root@localhost ~]# vi /etc/supervisor/supervisord.conf # 2.将下面几行前面的分号去掉,修改一下数据保存退出(用户名与密码自己定义)
[inet_http_server] # inet (TCP) server disabled by default
port=0.0.0.0:9001 # ip_address:port specifier, *:port for all iface
username=user # default is no username (open server)
password=123 # default is no password (open server) # 3.重新载入配置文件
[root@localhost ~]# supervisorctl reload # 4.在浏览器输入:IP:9001,再输入用户名与密码即可登陆查看。
七、开启多个进程
numprocs=2 # 启动进程的数目,默认为1。; 若 numprocs 不为1时,就是进程池的概念。process_name 的表达式中一定要包含 process_num 来区分不同的进程。
process_name=%(program_name)s_%(process_num)02d # 直接就可以使用
八、Supervisor管理的项目名称是中文的问题解决
在配置文件中添加或修改:environment=LANG="en_US.UTF-8",LC_ALL="en_US.UTF-8"。例如:
environment=LANG="en_US.UTF-8",LC_ALL="en_US.UTF-8" [include]
files = /www/server/panel/plugin/supervisor/profile/*.ini
https://www.osgeo.cn/post/71f93
Python—守护进程管理工具(Supervisor)的更多相关文章
- Python 进程管理工具 Supervisor 使用教程
Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...
- 进程管理工具supervisor
1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. supervisord负责读入配置文件,然后supervisor ...
- Linux进程管理工具Supervisor的安装配置
目录 Linux进程管理工具Supervisor的安装配置 简介 安装Python包管理工具 安装Supervisor 配置 配置文件参数说明 配置进程管理 启动supervisor 控制进程 交互终 ...
- Linux进程管理工具——supervisor
介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...
- linux 使用进程管理工具 supervisor
1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...
- python进程管理工具Supervisor
一.Supervisor简单介绍 supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程,或者可以说是多个程序.supervisor与lau ...
- Linux守护进程管理利器——Supervisor
Supervisor是采用 Python(2.4+) 开发的,它是一个允许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理.安装: yum in ...
- 进程管理工具Supervisor(一)简介与使用
Supervisor是用Python开发的一套client/server架构的进程管理程序,能做到开机启动,以daemon进程的方式运行程序,并可以监控进程状态等等. linux进程管理方式有传统的r ...
- 进程管理工具 Supervisor
要想在终端后台常驻进程,首先想到的是在命令后加 & 符号,来达到隐藏程序在后台的目的,尽管看起来进程已经在后台运行了,实际上终端会话关闭时进程还是会被 kill 掉,这种问题一般是采用搭配 n ...
随机推荐
- ContentProvider ContentResolver ContentObserver 内容:提供、访问、监听
内容提供 public class PersonContentProvider extends ContentProvider{ private static final String AUTHORI ...
- 解决 .NET CORE3.0 MVC视图层不即时编译
微软官方文档 Razor 编译 Razor SDK 默认启用 Razor 文件的生成时和发布时编译. 启用后,运行时编译将补充生成时编译,允许更新 Razor 文件(如果对其进行编辑). 运行时编译 ...
- LeetCode 124. Binary Tree Maximum Path Sum 二叉树中的最大路径和 (C++/Java)
题目: Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as ...
- 带你探索关于飞机Wi-Fi服务的神奇科学
资料来源: Colin Anderson制片公司/ Getty图片社 在35000英尺的高空冲浪?哇哦,这当然是我们现在所期望的飞行方式了.根据2018年全球旅行者研究(2018 Global Tra ...
- 把a表格的内容读取出来,然后写到b表格
把a表格的内容读取出来,然后写到b表格 #!/usr/bin/env python3 import sys #控制台要输入的两个参数格式为:python script_name.py 参数1 参数2 ...
- 电脑连接了HDMI线,电脑没有声音了,原因和解决办法
我们经常会使用笔记本电脑通过HDMI线外接显示器或者投影仪设备,会遇到笔记本电脑没有声音或者声音很小的问题. 没有声音说明电脑的播放设备(扬声器)设置问题,可以通过查看扬声器情况解决. 如图所示: 需 ...
- 低JAVA版本,高兼容性启动
低JAVA版本,高兼容性启动 背景:部分操作系统java环境低版本,暂时无法更新最新版本,新系统需要使用较高版本Java环境 1.JAVA低版本不兼容当前应用 2.解压安装JAVA,无需配置环境变量 ...
- python 简单字符串字典加密
1 def crypt(source,key): from itertools import cycle result='' temp=cycle(key) for ch in source: res ...
- [RoarCTF 2019]Simple Upload
0x00 知识点 1:Think PHP上传默认路径 默认上传路径是/home/index/upload 2:Think PHP upload()多文件上传 think PHP里的upload()函数 ...
- POJ 1062:昂贵的聘礼
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 40715 Accepted: 11839 Descripti ...