supervisor教程

supervisor教程

supervisor是一个统一管理批量化进程的工具,最主要的用处是接口或者程序半夜挂了,能够自己重新启动。

官方网址:http://www.supervisord.org/

1. 安装

使用pip和yum都可以安装。

pip install supervisor # 最新版
yum install supervisor # 可能不是最新版

# 安装完成后系统会增加一个echo_supervisord_conf的命令,改命令会输出配置信息。
echo_supervisord_conf
2. 配置管理

supervisor是通过两个配置文件对进程统一管理,格式是ini,注释是前面加分号。

主进程配置文件:/etc/supervisord.conf 就是supervisor本身的配置文件。

子进程配置文件:/etc/supervisord.d/ 该文件夹下是supervisor管理的各个进程所属的配置文件。

2.1 主进程配置文件

  1. 创建主配置文件,
echo_supervisord_conf > /etc/supervisord.conf # 将上一步的配置信息输出到一个文件中。
  1. 主进程配置文件解析

基本不用改,一般是反注释掉[inet_http_server]模块,可以通过web界面进行管理。以及配置[include]模块中的路径。

配置区域配置信息解释说明
[unix_http_server]file=/var/run/supervisor/supervisor.sock一定要配置对,sockt套接字,该套接字是supervisor客户端和服务端进行连接的桥梁。
chmod=0700该套接字的权限,表示用户拥有该套接字的读写该权限,组和其他都没有权限。
chown=nobody:nogroup用户和组设定, 格式:uid:gid
[inet_http_server]port=127.0.0.1:9001Web管理界面网址
username=user登录名
password=123登录密码
supervisordlogfile=/tmp/supervisord.logsupervisor运行的日志文件
logfile_maxbytes=50MB日志文件最大,超出会rotate,设置为0,表示不限大小。
logfile_backups=10日志文件备份数量,0表示不备份。
loglevel=info日志级别
pidfile=/tmp/supervisord.pidsupervisor进程号的保存地址。
nodaemon=false默认后台启动。
minfds=1024可以打开的文件描述符的最小值,也及时文件的索引最大值。一般就是调用子进程的配置文件数量。
minprocs=200能管理的进程数量
supervisorctl(二选一)serverutl=unix:///tmp/supervisor.sock通过unix socket连接supervisord,路径要和file一样。理解就是能通过服务器的命令行supervisorctl进行管理
serverurl=http://127.0.0.1:9001在本机管理另一台服务器的supervisor服务,例如通过supervisorctl 10.0.0.1 --http 10.0.0.2 进行管理
[program:tomcat]管理进程的参数 ,格式 program:项目名称,这个区域在子进程文件中替代。
command=/opt/apache-tomcat/bin/catalina.sh run执行命令
autostart=truesupervisord启动的时候也自动启动
startsecs=10启动10秒后还是处于正常运行状态,表示该服务已经启动了。有异常就退出
autorestart=true[unexpected, true, false], unexpected,如果是Kill -9的话,表示是异常结束的,会重新启动。supervisorctl stop 表示正常结束,不重新启动。一般部署服务都是用true。
startetries=3重启次数。失败三次之后
user=root默认用户启动
priority=999启动先后顺序编码,值小的先启动。
redirect_stderr=true错误和正常信息都重定向到stdout
stdout_logfile_maxbytes=20MBstdout 日志大小
stdout_logfile_backups=20stdout日志文件备份数量,默认10
stdout_logfile=/otp.apache-tomcat/logs/catalina.outstdout日志文件保存路径,需要保证路径存在,不存在手动创建
[include]files=/etc/supervisord.d/*.ini可以不用像[program:xxx]区域一样配置,读取子进程配置文件就可以。

2.2 子进程配置文件

  1. 创建子进程配置文件夹
mkdir /etc/supervisord.d/ -p
  1. 创建子进程配置文件, 以nginx为例
# 项目名称
[program:nginx]

# 执行项目之前,需要切换到哪个用户
username=root

# 执行项目前,需要cd到哪个目录下
directory=/opt/bin

# 命令中可能需要的环境变量信息
environment=PYTHON_HOME="/root/anaconda/bin/"

# 如果命令本身是多进程,那么需要设置stopasgroup,否则只会杀死命令的主进程
stopasgroup=true

# 执行命令,以后台形式
command=nginx

# 开启supervisor就启动
autostart=true

# 发现关闭了就重启
autorestart=true

# 观察时间,如果观察时间内该项目的pid消失了,就说明失败了
startsecs=10

# 重启次数
startetries=3

# 错误信息和正常信息分开存储
redirect_stderr=false

# 错误信息保存路径
stderr_logfile=/tmp/nginx_stderr.log

# 正常信息保存路径
stdout_logfile=/tmp/nginx_stdout.log

# 单个正常信息日志文件大小
stdout_logfile_maxbytes=20MB

# stdout日志文件备份数量
stdout_logfile_backups=20
3. 启动和管理supervisor
  1. 启动
命令作用说明
supervisord -c /etc/supervisord.conf读取主进程配置文件,并启动
systemctl start supervisord.service编写supervisor.service文件启动supervisor,并加载默认配置文件看,默认是/etc/supervisord.conf
systemctl enable supervisord.service开机就启动
  1. 管理
命令作用说明
supervisorctl status查看所有进程的状态
supervisorctl stop all / supervisorctl stop nginx停止所有进程/停止nginx进程
supervisorctl start all / supervisorctl start nginx启动所有进程/启动nginx进程
supervisorctl restart all / supervisorctl restart nginx启动所有进程/启动nginx进程重新启动所有进程/重新启动nginx进程
supervisorctl update重新加载新的配置文件,并启动新加入的进程。
supervisorctl relaod配置文件修改后,主进程不变,重新启动所有的子进程
4. 附录

配置systemctl的supervisord.service文件

[Unit]     				
Description=supervisord	                  #当前配置文件的描述信息
;After=network.target nginx.service    #表示当前服务是在那个服务后面启动,一般定义为网络服务启动后启动
 
[Service]
WorkingDirectory=/home/test                #工作目录				
Type=forking			                   #定义启动类型,后台执行 
ExecStart=/home/test/supervisord-start.sh  #定义启动进程时执行的命令。
ExecReload=/home/test/supervisord-restart.sh      #重启服务时执行的命令
ExecStop=/home/test/supervisord-stop.sh		   #定义关闭进程时执行的命令。
PrivateTmp=true							   #是否分配独立空间
Restart=always
RestartSec=5
StartLimitInterval=0
StartLimitBurst=5
 
[Install]
WantedBy=multi-user.target    #表示多用户命令行状态

/home/test/supervisord-start.sh文件

#!/bin/bash
supervisord -c /etc/supervisord.conf

/home/test/supervisord-restart.sh

#!/bin/bash
tail -n +1 /tmp/supervisord.pid | grep -v '^$' | tail -n 1 | xargs kill -9
supervisord -c /etc/supervisord.conf

/home/test/supervisord-stop.sh

#!/bin/bash
tail -n +1 /tmp/supervisord.pid | grep -v '^$' | tail -n 1 | xargs kill -9
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值