Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台服务,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。
CentOS 7 安装Linux Supervisor
- 安装
yum install python-setuptools
easy_install supervisor
- 创建配置文件
# 新建目录
mkdir -p /etc/supervisor/conf.d
mkdir -p /var/log/supervisor
# 建立 supervisor 配置文件
touch /etc/supervisor/supervisord.conf
supervisord.conf 中的内容如下
# supervisord.conf 中的内容如下
; supervisor config file
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9066 ; (ip_address:port specifier, *:port for all iface)
username=root ; (default is no username (open server))
password=root ; (default is no password (open server))
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf ; 指定需要守护进程的配置文件位置
- 需要守护的程序配置文件 切换到上一步配置文件中指定的需要守护进程的配置文件所在的文件夹,文件内容如下,第一行名字随意,创建的配置文件名随意 注意: 如果
startsecs
设置为 0 将关闭异常退出检测,supervisor
会不停的尝试重启被守护的进程
[program:collection]
command=/你的/可执行程序/位置
autostart=true ; supervisord守护程序启动时自动启动
autorestart=true ; supervisord守护程序重启时自动重启
startsecs=0 ; 单位秒,设置程序运行多久退出为正常退出,否则为异常退出,异常退出达到最大重试次数,将不在尝试启动程序
startretries=5 ; 程序异常重试次数
exitcodes=0 ; 指定正常退出代码
directory=/root/datacollection/
redirect_stderr=true ; 将stderr重定向到stdout
stdout_logfile = /root/datacollection/out.log
stdout_logfile_maxbytes=2MB ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=5 ; # of stdout logfile backups (default 10)
- 手动指定配置文件启动 supervisor
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
-
通过网页查看状态 程序配置文件中指定了端口和IP地址,并设置了用户名密码,本笔记直接访问本机
9066
端口,用户名密码均为root
-
开机自启 编辑创建以下文件, 位置不能更换
vim /lib/systemd/system/supervisord.service
内容为
[Unit]
Description=Process Monitoring and Control 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
- 然后执行
systemctl enable supervisord.service
设置为开机自启 - 常用命令
-
supervisor常用命令 重新启动 supervisorctl reload 查看进程 supervisorctl status 启动某个进程 supervisorctl start xxxx 停止某个进程 supervisorctl stop xxxx 重启某个进程 supervisorctl restart xxxx