# linux 使用 supervisor 管理系统服务 {#linux-使用-supervisor-管理系统服务}
本文讲述 linux 系统如何使用 supervisor 管理系统服务。传统的 linux 系统服务管理采用的是 init 脚本(如 centos 6)。使用 supervisor 方案可以支持服务进程死掉后自动重启。
提示
- 提供与Systemd类似的功能。
- 若 docker 宿主机的操作系统版本过低(如 centos6),那么生成的 docker 容器中无法使用 systemctl,进而无法使用 Systemd 管理后台服务,此时可以使用 supervisor 方案。
# 安装 supervisor 管理工具 {#安装-supervisor-管理工具}
# centos 安装 supervisor {#centos-安装-supervisor}
建议使用centos7版本以上, centos6仓库没有提供该软件包,安装supervisor的步骤比较繁琐。
yum install supervisor
还可以通过python包管理工具pip来安装,步骤如下: yum install python-setuptools -y
easy_install pip
pip install supervisor
# 基于模板生成 supervisor 的通用配置文件 {#基于模板生成-supervisor-的通用配置文件}
echo_supervisord_conf > /etc/supervisord.conf
补充如下配置
[include]
files = /etc/supervisord.d/*.conf
为了方便管理,每个应用程序在/etc/supervisord.d 下创建一份单独的配置文件。
# 启动 supervisor {#启动-supervisor}
supervisord -c /etc/supervisord.conf
# 支持应用程序自动重启 {#支持应用程序自动重启}
提示
此处以/root/redirect-api --profile back-pro 为例。
-
创建配置文件/etc/supervisord.d/redirect.conf
[program:redirect] command=/root/redirect-api --profile back-pro ; 被监控的进程路径 priority=1 ;数字越高,优先级越高 numprocs=1 ; 启动几个进程 autostart=true ; 随着supervisord的启动而启动 autorestart=true ; 自动重启。。当然要选上了 startretries=100 ; 启动失败时的最多重试次数 exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定) stopsignal=KILL ; 用来杀死进程的信号 stopwaitsecs=10 ; 发送SIGKILL前的等待时间 redirect_stderr=true ; 重定向stderr到stdout stdout_logfile=/var/log/supervisor.log ; 配置标准输出日志文件 stderr_logfile=/var/log/supervisor.log ; 配置错误输出日志文件
若程序启动时需要指定当前工作目录,那么还需要配置directory参数
- 重新加载配置文件 supervisorctl reload
# 管理应用程序 {#管理应用程序}
# 通过命令行管理 {#通过命令行管理}
提示
此处以 redirect 应用程序为例。
supervisorctl status redirect
supervisorctl stop redirect
supervisorctl start redirect
supervisorctl restart redirect
把redirect 换成all,即可管理所有应用程序。
# 通过 web 界面管理 {#通过-web-界面管理}
这是 supervisor 的特色功能,Systemd 无此功能。
相关使用方法待日后完善。
# 注意 {#注意}
# supervisor 只能运行前台命令 {#supervisor-只能运行前台命令}
无法运行 daemon 服务,如 service httpd start 。
若想运行 daemon 服务,也有解决方法,请自行查找教程。