Supervisor 简介
Supervisor 是一个用 Python 开发的进程管理工具, 可以在 Linux/Unix 系统中对多个进程进行启动、停止、重启、监听等管理操作, 不推荐在 Windows 系统上使用。它非常适合在服务器环境中运行服务进程时使用, 因为它可以在进程意外崩溃时自动重启这些进程, 不再需要自己写 shell 脚本来控制。
Supervisor 通过 supervisord
进程来管理所有配置的子进程, 并通过 supervisorctl
命令与 supervisord
交互
安装 Supervisor
在安装 Supervisor 之前, 需要确保系统中已安装了 Python 2.4 及以上版本。以下命令适用于 CentOS 7, 默认使用 Python 2.7 环境进行安装
安装所需依赖
# 首先安装 python-setuptools
yum -y install python-setuptools
# 然后通过 easy_install 安装 Supervisor
easy_install supervisor
创建 Supervisor 配置文件
在 /etc/supervisor
目录下创建 conf.d
文件夹, 用来存放各个进程的配置文件
mkdir -p /etc/supervisor/conf.d
echo_supervisord_conf
是 supervisor
提供的一个命令, 用于生成默认的配置文件
使用 echo_supervisord_conf
命令生成默认的 supervisord
配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
创建新用户 (可选)
为了安全起见, 可以创建一个专门用于运行 Supervisor 的系统用户
useradd supervisor
将 Supervisor 配置为系统服务
要将 supervisord
进程配置为 CentOS 7 的 Systemd 服务, 可以在 /usr/lib/systemd/system
目录下创建 supervisord.service
文件
vim /usr/lib/systemd/system/supervisord.service
编辑 supervisord.service
文件, 内容如下
[Unit]
Description=supervisord - Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecReload=/usr/bin/supervisorctl reload
ExecStop=/usr/bin/supervisorctl shutdown
# 也可以换成 supervisor
User=root
[Install]
WantedBy=multi-user.target
配置 Supervisor
编辑 supervisord
的主配置文件 /etc/supervisor/supervisord.conf
, 在文件末尾添加以下内容
[include]
files = /etc/supervisor/conf.d/*.conf
这样 Supervisor 会自动读取并加载 conf.d
目录中的所有 .conf
配置文件
添加服务配置文件
现在可以为要管理的进程创建配置文件, 例如管理一个名为 goapp
的 Go 应用, 可以创建 /etc/supervisor/conf.d/goapp.conf
vim /etc/supervisor/conf.d/goapp.conf
在 goapp.conf
中添加以下内容
[program:main]
command=/srv/www/websiteurl.com/bin/main
autostart=true
autorestart=true
startretries=10
user=supervisor
参数含义
command 指定要启动的程序路径
autostart 是否随 supervisord 启动时自动启动该程序
autorestart 是否在进程退出后自动重启该程序
startretries 启动失败后的重试次数
user 启动该进程的用户
设置 Supervisor 开机启动
# 设置开机启动
systemctl enable supervisord
# 重启supervisord服务
systemctl restart supervisord
# 可以使用 supervisorctl 查看 main 进程的运行状态
supervisorctl status main
Supervisor 详细配置文件
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件, supervisorctl 会使用
;chmod=0700 ;socket 文件的 mode, 默认是 0700
;chown=nobody:nogroup ;socket 文件的 owner, 格式: uid:gid
;[inet_http_server] ;HTTP 服务器, 提供 web 管理界面
;port=127.0.0.1:9001 ;Web 管理后台运行的 IP 和端口, 如果开放到公网, 需要注意安全性
;username=user ;登录管理后台的用户名
;password=123 ;登录管理后台的密码
[supervisord]
logfile=/tmp/supervisord.log ;日志文件, 默认是 $CWD/supervisord.log
logfile_maxbytes=50MB ;日志文件大小, 超出会 rotate, 默认 50MB, 如果设成0, 表示不限制大小
logfile_backups=10 ;日志文件保留备份数量默认 10, 设为0表示不备份
loglevel=info ;日志级别, 默认 info, 其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false ;是否在前台启动, 默认是 false, 即以 daemon 的方式启动
minfds=1024 ;可以打开的文件描述符的最小值, 默认 1024
minprocs=200 ;可以打开的进程数的最小值, 默认 200
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过 UNIX socket 连接 supervisord, 路径与 unix_http_server 部分的 file 一致
;serverurl=http://127.0.0.1:9001 ;通过 HTTP 的方式连接 supervisord
; [program:xx]是被管理的进程配置参数, xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ;程序启动命令
autostart=true ;在 supervisord 启动的时候也自动启动
startsecs=10 ;启动 10秒 后没有异常退出, 就表示进程正常启动了, 默认为 1秒
autorestart=true ;程序退出后自动重启,可选值: [unexpected,true,false], 默认为 unexpected, 表示进程意外杀死后才重启
startretries=3 ;启动失败自动重试次数, 默认是 3
user=tomcat ;用哪个用户启动进程, 默认是 root
priority=999 ;进程启动优先级, 默认 999, 值小的优先启动
redirect_stderr=true ;把 stderr 重定向到 stdout, 默认 false
stdout_logfile_maxbytes=20MB ;stdout 日志文件大小, 默认 50MB
stdout_logfile_backups = 20 ;stdout 日志文件备份数, 默认是 10
;stdout 日志文件, 需要注意当指定目录不存在时无法正常启动, 所以需要手动创建目录 (supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默认为 false, 进程被杀死时, 是否向这个进程组发送 stop 信号, 包括子进程
killasgroup=false ;默认为 false, 向进程组发送 kill 信号, 包括子进程
;包含其它配置文件
[include]
files=/etc/supervisor/conf.d/*.conf ;可以指定一个或多个以 .ini 结束的配置文件
原文
Supervisor安装与配置(Linux/Unix进程管理工具)
Linux Supervisor的安装与使用入门
Supervisord on linux CentOS 7 only works when run with root