Supervisor 安装与配置
一、介绍
Supervisor 是用Python开发的一个 client/server
服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,Supervisort 监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
因为Supervisor是Python开发的,安装前先检查一下系统否安装了Python2.4以上版本。下面以 CentOS7,Python2.7版本环境下,介绍Supervisor的安装与配置步聚。
二、名词释义
supervisor:要安装的软件的名称。
supervisord:装好supervisor软件后,supervisord用于启动supervisor服务。
supervisorctl:用于管理supervisor配置文件中program。
三、Supervisor 安装
Supervisor 需要使用 root 用户安装,以 CentOS7 为例,安装指令如下:
注意:Supervisor 目前只支持 Python2.7,CenOS7默认已安装 Python2.7。
su - root
yum install epel-release
yum install -y supervisor
systemctl enable supervisord # 开机自启动
systemctl start supervisord # 启动supervisord服务
systemctl status supervisord # 查看supervisord服务状态
ps -ef|grep supervisord # 查看是否存在supervisord进程
三、Supervisor 配置
安装完成后,会生成一个配置文件和一个目录:
配置文件:/etc/supervisor.conf
配置目录:/etc/supervisor.d
全局的配置文件在 /etc/supervosor.conf,具体单个进程的配置不建议全部写进 /etc/supervisor.conf 中,应该在 /etc/supervisor.d/ 目录下创建相应的配置文件,如:
[program:cesi]
command=/usr/local/cesi/venv/bin/python3 /usr/local/cesi/cesi/run.py --config-file /etc/cesi.conf
autostart=true
startsecs=10
starttries=3
user=root
priority=996
redirect_stderr=false
stdout_logfile=/usr/local/cesi/cesi.log
stderr_logfile=/usr/local/cesi/cesi-err.log
stopasgroup=false
killasgroup=true
在使用单位进程配置文件前,需要将 /etc/supervisor.conf 中的
;[include]
;files = /etc/supervisor/config.d/*.ini
修改为:
[include]
files = /etc/supervisor/config.d/*.conf # 建议用 .conf 作为扩展名
具体配置文件见同目录下的配置文件。
四、启动控制终端
在安装Supervisor当前机器上运行 supervisorctl,即可进入控制终端,界面如下:
可以看到进入控制终端后,默认列出了正在运行中的进程,输入 ?
可以查看控制终端模式下的指令集,输入 exit
可以退出,简要指令介绍如下:
# 启动 cesi 进程
start cesi
# 停止 cesi 进程
stop cesi
# 重启 cesi 进程
restart cesi
# 更新 supervisor 配置
update
# 重启 supervisor
reload
# 查看 supervisor 状态
status
更多指令不作介绍,具体百度。
也可以不进入控制终端,完成某个进程的启动、停止、重启,也可以查看supervisor的状态,更新配置等,指令如下:
supervisorctl status # 查看所管理的服务状态;
supervisorctl start <program_name> # 启动一个服务;
supervisorctl restart <program_name> # 重启一个服务(注意:重启服务不会重新加载配置文件);
supervisorctl stop <program_name> # 关闭一个服务;
supervisorctl update # 重新加载配置文件,并重启配置有变动的服务;
supervisorctl reread # 重新加载配置文件,但不会重启配置有变动的服务;
supervisorctl reload # 重启 Supervisor 服务端;
supervisorctl clear <program_name> # 清理一个服务的 stdout log;
五、注册为系统服务
将supervisor注册为系统服务,可以随系统启动,免去手工启动的麻烦。
先在 /usr/lib/systemd/system
目录下创建 supervisord.service
文件:
touch /usr/lib/systemd/system/supervisord.service
编辑 supervisord.service,并输入如下内容并保存:
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
PIDFile=/var/run/supervisord.pid
ExecStart=/bin/supervisord -c /etc/supervisord.conf
ExecStop=/bin/supervisorctl shutdown
ExecReload=/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
设置为随系统启动,并启动服务
systemctl enable supervisord
查看服务是否成功启动
# systemctl is-enabled supervisord
enabled
成功之后,就可以使用如下命令管理supervisor服务了:
# systemctl stop supervisord
# systemctl start supervisord
# systemctl status supervisord
# systemctl reload supervisord
# systemctl restart supervisord
**注意:**Supervisor只能管理非daemon的进程,也就是说Supervisor不能管理守护进程。否则提示Exited too quickly (process log may have details)异常。需要以前台进程的方式运行。
六、管理界面
出于安全考虑,默认配置是没有开启web管理界面,需要修改supervisord.conf配置文件打开http访权限,将下面的配置:
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1: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))
修改成:
[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))
port:绑定访问IP和端口,这里是绑定的是本地IP和9001端口
username:登录管理界面的用户名
password:登录管理界面的密码
在浏览器中输入 http://127.0.0.1:9001 即可打开管理界面,如下:
1、管理界面的弊端
Supervisor 不支持跨机器的进程监控,一个supervisord只能监控本机上的程序,大大限制了supervisor的使用。不过由于supervisor本身支持xml-rpc,因此也有一些基于supervisor二次开发的多机器进程管理工具。比如:
-
- Django-Dashvisor
Web-based dashboard written in Python. Requires Django 1.3 or 1.4. - Nodervisor
Web-based dashboard written in Node.js. - Supervisord-Monitor
Web-based dashboard written in PHP. - SupervisorUI
Another Web-based dashboard written in PHP. - CeSi
CeSi is a web interface provides manage supervizors from same interface.
- Django-Dashvisor
官方推荐使用 CeSi 进行集群管理,原文链接:https://github.com/gamegos/cesi/blob/master/README.md。