supervisor安装配置

前言

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

所以,就需要一个工具,时刻监控 web 应用的运行情况,管理该进程。

Supervisor 就是解决这种需求的工具,可以保证程序崩溃后,重新把程序启动起来等功能。

简介
Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来在 UNIX-like 系统(不支持 Windows)下启动、重启(自动重启程序)、关闭进程(不仅仅是 Python 进程)

环境

Centos7

安装

wget https://sec.ly.com/mirror/get-pip.py -O /tmp/get-pip.py
python /tmp/get-pip.py
pip install supervisor

配置

# echo_supervisord_conf > /etc/supervisord.conf //生成一个示例配置文件,配置文件如下
#cat /etc/supervisord.conf |grep -v "^;"|grep -v "^$"
[unix_http_server]
file=/var/supervisor/supervisor.sock   ; the path to the socket file
[supervisord]
logfile=/var/log/supervisor/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=/var/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false               ; start in foreground if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
上述配置文件中用到的目录,需要手动创建好
#mkdir -p /var/log/supervisor
#mkdir -p /var/supervisor
#mkdir -p /etc/supervisor/conf.d

举例

3添加radiusd到supervisor启动
# vim/etc/supervisor/conf.d/radiusd.conf,添加如下内容
[program:radiusd]
command=radiusd -f
autostart=true     
autorestart
=True
添加完成后执行
#supervisorctl update 更新下配置文件,即可启动radiusd,注意启动命令是radiusd -f 而不是radiusd
提示:虽然在写command命令时跟在shell环境下一样,但是需要注意的是,如果你想用supervisord来托管你的程序,必须要让你的程序在前台启动,不允许以daemon的形式启动,比如php-fpm,command命令就需要这么写
command=/usr/local/php/sbin/php-fpm --nodaemonize -c /usr/local/php/etc/php-fpm.conf
否则会报错 如下;
[root@local conf.d]# supervisorctl status
php-fpm FATAL Exited too quickly (process log may have details)

附:supervisor常见命令

3 supervisor常见命令
更新新的程序配置到supervisord
supervisorctl update
 
重新加载supervisord的配置文件
supervisorctl reload
 
启动某个进程(program_name=你配置中写的程序名称)
supervisorctl start program_name
 
查看正在守候的进程
supervisorctl satus
 
停止某一进程 (program_name=你配置中写的程序名称)
pervisorctl stop program_name
 
重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name
 
停止全部进程
supervisorctl stop all
 
【supervisor自身配置开机启动】

配置Supervisor开机启动:

新建一个“supervisord.service”文件

# dservice for systemd (CentOS 7.0+) 
# by ET-CS (https://github.com/ET-CS) 
[Unit] 
Description=Supervisor daemon

[Service] 
Type=forking 
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf 
ExecStop=/usr/bin/supervisorctl shutdown 
ExecReload=/usr/bin/supervisorctl reload 
KillMode=process 
Restart=on-failure 
RestartSec=42s

[Install] 
WantedBy=multi-user.target

将文件拷贝至:“/usr/lib/systemd/system/supervisord.service”

systemctl enable supervisord

验证一下是否为开机启动:systemctl is-enabled supervisord

参考资料
https://stackoverflow.com/questions/32965149/supervisord-php5-fpm-exited-too-quickly

原文地址:https://www.cnblogs.com/Kevin-1967/p/8662715.html