一、Supervisor 介绍

Supervisor 是一个用 Python 编写的进程管理工具,它可以用于监控和控制类 UNIX 操作系统上的多个进程。它是一个客户端/服务器系统,其中 Supervisor 的服务器端称为 supervisord,负责启动管理的子进程、响应客户端命令、重启崩溃或退出的子进程、记录子进程的 stdout 和 stderr 输出,以及处理子进程生命周期中的事件。客户端则称为 supervisorctl,它提供了一个类 shell 的接口,允许用户通过命令行与 supervisord 服务器进程通信,以控制子进程的状态、启动和停止进程,并获取正在运行的进程列表。

Supervisor官网地址:http://supervisord.org/

二、安装环境介绍

Linux:CentOS Linux release 7.6.1810 (Core)

Supervisor:supervisor-4.2.5

Python:Python 2.7.5

三、安装 Supervisor

1、下载 supervisor 源码包【supervisor-4.2.5.tar.gz】

2、在根目录新建一个名为【service】的目录,并把【supervisor-4.2.5.tar.gz】包移入进去

# 新建目录
mkdir service # 解压supervisor源码包
tar -zxvf supervisor-4.2.5.tar.gz

3、进入supervisor目录,内容如下图:

# 进入目录
cd supervisor-4.2.5 # 查看目录下的文件
ll

4、安装 supervisor

# 安装 supervisor
python setup.py install

5、使用帮助命令来检测是否安装成功,结果如下图:

supervisorctl --help

四、配置 Supervisor

1、创建一个文件夹,用于存储相关配置文件

mkdir /etc/supervisor

2、使用命令,创建一个【Supervisor】配置文件。

# 符合(>)右侧的是配置文件的路径
echo_supervisord_conf > /etc/supervisor/supervisord.conf

3、找到 supervisord.conf 文件,修改里面的配置参数

# 原配置
[unix_http_server]
file=/tmp/supervisor.sock ; the path to the socket file
;chmod=0700 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server) # 修改后的配置,原先的/tmp目录下的内容容易被系统删除,导致启动失败
[unix_http_server]
file=/var/run/supervisor.sock ; the path to the socket file
;chmod=0700 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server) ------------------------------------------------------------------------------ # 原配置
[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
silent=false ; no logs to stdout if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200 # 修改后的配置,修改了服务的日志文件目录,修改了supervisord.pid的存放位置
[supervisord]
logfile=/etc/supervisor/log/supervisord.log ; 避免被系统删除
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/var/run/supervisord.pid ; 避免被系统删除
nodaemon=false ; start in foreground if true; default false
silent=false ; no logs to stdout if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200 ------------------------------------------------------------------------------ # 原配置
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as in [*_http_server] if set
;password=123 ; should be same as in [*_http_server] if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available # 修改后的配置,修改supervisor.sock的存放位置,避免被系统删除
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as in [*_http_server] if set
;password=123 ; should be same as in [*_http_server] if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available ------------------------------------------------------------------------------ # 原配置
;[include]
;files = relative/directory/*.ini # 修改后的配置,设置子任务的配置文件目录
[include]
files = /etc/supervisor/conf.d/*.ini

4、保存退出后更新配置文件,如果之前没启动过服务可以不用更新

supervisorctl -c /etc/supervisor/supervisord.conf update

五、配置 Supervisor 的子任务

进入到【/etc/supervisor/conf.d】目录,创建名为【test.ini】的子任务,并写入如下内容:

#进入子任务配置文件目录
cd /etc/supervisor/conf.d #创建子任务配置文件
touch test.ini #编辑配置文件
vi test.ini #配置文件中的具体内容
[program:test] ;要和文件名称相同
command=/usr/local/php74/bin/php think testJob ;启动该程序时将运行的命令,我这用的是TP框架中的think命令
directory=/www/school-task ;表示command命令的执行目录,本文用的时候TP框架,school-task为项目名称
autorestart=true ;自动重启
startsecs=3 ;启动后程序需要保持运行的总秒数,以认为启动成功(将进程从STARTING状态移动到running状态)。设置为0表示程序不需要在任何特定的时间内保持运行
startretries=3 ;启动失败时的最多重试次数
stdout_logfile=/etc/supervisor/log/test.out.log     ;输出日志文件路径
stderr_logfile=/etc/supervisor/log/test.err.log ;错误日志文件路径
stdout_logfile_maxbytes=2MB ;设置stdout_logfile的文件大小
stderr_logfile_maxbytes=2MB ;设置stderr_logfile的文件大小
user=root ;指定运行的用户
priority=999 ;程序在启动和关闭顺序中的相对优先级
numprocs=1
process_name=%(program_name)s_%(process_num)02d

六、supervisord相关操作命令

#启动supervisord
supervisord -c /etc/supervisor/supervisord.conf #关闭supervisord
supervisorctl -c /etc/supervisor/supervisord.conf shutdown #查看supervisord管理的进程,【all】是可选参数,表示查看所有的子任务
supervisorctl -c /etc/supervisor/supervisord.conf status all #重新加载配置
supervisorctl -c /etc/supervisor/supervisord.conf update #重新启动supervisord
supervisorctl -c /etc/supervisor/supervisord.conf reload

#停止supervisord管理的进程,【process_name】表示子任务名称
supervisorctl -c /etc/supervisor/supervisord.conf stop process_name #启动supervisord管理的进程,【process_name】表示子任务名称
supervisorctl -c /etc/supervisor/supervisord.conf start process_name

七、添加supervisord的systemctl服务命令和开机自启

1、新建一个服务文件【/usr/lib/systemd/system/supervisord.service】,写入以下内容:

[Unit]
Description=Supervisor daemon [Service]
#表示systemd应该以forking模式启动服务。在此模式下,systemd会启动一个父进程,然后父进程会fork出一个或者多个子进程。
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf shutdown
ExecReload=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf reload
ExecStatus=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf status
ExecRestart=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf restart
#表示当systemd需要停止服务时,它会发送信号到服务的主进程。如果服务有子进程,那么子进程不会收到这个信号。
KillMode=process
#表示当服务非正常退出时(例如收到SIGKILL信号),systemd会尝试重启服务。
Restart=on-failure
#如果服务失败了,systemd会在尝试重启服务前等待30秒
RestartSec=30s
#指定运行服务的用户
User=root [Install]
WantedBy=multi-user.target

2、重新加载配置文件

systemctl daemon-reload

3、配置系统开机启动

systemctl enable supervisord.service

4、systemctl 操作命令

# 启动supervisord
systemctl start supervisord.service # 查看supervisord状态
systemctl status supervisord.service # 重启supervisord
systemctl restart supervisord.service # 停止supervisord
systemctl stop supervisord.service # 重载配置
systemctl reload supervisord.service

八、结果展示

Supervisor 安装与使用的更多相关文章

  1. supervisor安装和配置

    直接命令 easy_install supervisor 如果报错先安装 yum install python-setuptools,再上面一条命令: 安装成功后显示finished,我们再次进行py ...

  2. Supervisor 安装及配置管理uwsgi进程

    Supervisor介绍 Supervisor 允许其用户在UNIX类操作系统上控制多个进程. 块如下: 方便 需要为每个进程实例编写rc.d脚本通常是不方便的. rc.d脚本是进程初始化/自动启动/ ...

  3. mac下supervisor安装及简单配置

    supervisor是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(守护进程).可以用他来管理自己的“服务程序”. 安装 首先安装Python,Mac系统好像自带. 执 ...

  4. supervisor安装、使用详解

    supervisor是用python写的一个进程管理工具,用来启动,重启,关闭进程. 1 supervisor的安装 pip install supervisor 2 supervisor的配置文件( ...

  5. supervisor安装部署和使用实例

    Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit,monit和supervisord的一个比较大的差异是supervisord管理的进程必须由superviso ...

  6. Supervisor安装与配置(Linux/Unix进程管理工具)

    原文链接:http://blog.csdn.net/xyang81/article/details/51555473 Supervisor(http://supervisord.org/)是用Pyth ...

  7. Linux系统下 Supervisor 安装搭建(yum安装)

    安装Supervisor # 安装supervisor yum install supervisor # 打开supervisor的配置文件 vi /etc/supervisord.conf 将sup ...

  8. Linux系统下 Supervisor 安装搭建

    在 web 应用部署到线上后,需要保证应用一直处于运行状态,在遇到程序异常.报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务. 所以,就需要一个工具,时刻监控 web 应用 ...

  9. supervisor安装及其配置

    一.supervisor概述 supervisor是一个c/s系统,被用来在类Unix系统中监控进程状态.supervisor使用python开发. 服务端进程为supervisord,主要负责启动自 ...

  10. Supervisor安装与配置

    Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...

随机推荐

  1. go经典知识及总结

    1.无论sync.Mutex还是其衍生品都会提示不能复制,但是能够编译运行 加锁后复制变量,会将锁的状态也复制,所以 mu1 其实是已经加锁状态,再加锁会死锁. 所以此题的答案是 fatal erro ...

  2. 在MATPool矩池云完成Pytorch训练MNIST数据集

    本文为矩池云入门手册的补充:Pytorch训练MNIST数据集代码运行过程. 案例代码和对应数据集,以及在矩池云上的详细操作可以在矩池云入门手册中查看,本文基于矩池云入门手册,默认用户已经完成了机器租 ...

  3. 在Bind DNS Server中添加一个开发环境的域名

    1.Create Master Zone 我们的开发域名约定为dudusoft.cn 输入2个字段,然后提交 2.在域名里面,添加主机记录 点击上图的"Address(0)",出现 ...

  4. 【Azure 应用服务】更新镜像后并重启应用服务,部署日志始终没有出现加载新镜像成功的日志

    问题描述 在App Service中部署镜像文件,发现镜像一直没有部署,重启App Service服务也无效果. DockerFile如下: FROM crunchgeek/php-fpm:7.0 # ...

  5. 答应我,在vue中不要滥用watch好吗?

    前言 上周五晚上8点,开开心心的等着产品验收完毕后就可以顺利上线.结果产品突然找到我说要加需求,并且维护这一块业务的同事已经下班走了,所以只有我来做.虽然内心一万头草泥马在狂奔,但是嘴里还是一口答应没 ...

  6. 为什么带NOLOCK的查询语句还会造成阻塞

    背景 客户反映HIS数据库在11点出现了长时间的阻塞,直到手动KILL掉阻塞的源头.请我们协助分析原因,最终定位到.NET程序中使用的SqlDataReader未正常关闭导致. 现象 登录SQL专家云 ...

  7. 7、zookeeper应用场景-分布式锁

    分布式锁 实现原理:有序节点+watch监听机制实现 分布式锁有多种实现方式,比如通过数据库.redis都可实现.作为分布式协同工具Zookeeper,当然也有着标准的实现方式.下面介绍在zookee ...

  8. Linux 系统错误码 errno 剖析

    一.errno 介绍 1.1 errno 简介 Linux 中系统调用的错误都存储于错误码 errno 中.errno 由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误. er ...

  9. 搭建一个Java项目可直接拿去使用的通用工具类

    1.通用枚举类 import lombok.Getter; /** * @Description 状态码定义约束,共6位数,前三位代表服务,后3位代表接口 * 比如 商品服务210,购物车是220.用 ...

  10. 如何获取拼多多推流码并使用OBS进行直播-疯狂URL

    简介 拼多多直播在PC端可以用多多视频|多多直播端进行开播,它的功能类似于常见的抖音直播助手和快手直播伴侣等等客户端.此教程测试时间 2023-7-12,第三方随时可能会升级,无法保证时效,建议不要升 ...