Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,用于监听、启动、停止、重启一个或多个进程

安装如下

sudo yum update
sudo yum install supervisor
sudo systemctl enable supervisord
sudo systemctl start supervisord

通常情况下,supervisor自定义脚本位于以下2个位置

  • /etc/supervisor.d
  • /etc/supervisor/conf.d

下面是我常用的脚本示例,更多详细设置可以参考官网配置文档)

[program:blog]
# 程序启动目录
directory=/home/chancel/apps/blog
# 程序启动命令
command=/home/chancel/apps/blog/venv/bin/gunicorn --pid /home/chancel/apps/blog/pid --bind unix:/home/chancel/apps/blog/socket flaskr:app
# 开机自启
autostart=true
# 在进程挂掉后自动拉起
autorestart=true
# 日志配置
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=10MB
# 运行用户
user=chancel
# 运行环境
environment=PATH="/home/chancel/apps/blog/venv/bin:%(ENV_PATH)s"
environment=FLASKR_CONFIG="/home/chancel/apps/blog/flaskr-prod.json"

添加脚本后,我们可以使用supervisorctl热启动刚才添加的脚本进程

sudo supervisorctl update

supervisorctl是用于操作管理supervisor后台进程的CLI,常见操作如下

# 打印所有后台进程状态
sudo supervisorctl status
# 启动/停止/重启 后台进行
sudo supervisorctl start/stop/restart [progress_name]
# 重新读取所有后台进程(谨慎:这会重启所有后台进程)
sudo supervisorctl reload
# 热加载新添加的程序
sudo supervisorctl update

如果你需要web界面来监控后台进程的运行情况,可以编辑/etc/supervisor.conf,如下所示开放web接口页面用于监控后台进程运行状况

...
[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)
...