Supervisord 使用教程:安装、配置与应用
一、引言
Supervisord
是一个用 Python 开发的进程管理工具
,它能够将普通的命令行进程转化为后台守护进程(daemon)
,并实时监控进程状态。当进程异常退出时,Supervisord
可自动重启该进程,确保服务的持续运行。在服务器管理中,Supervisord
常用于管理各类应用程序和服务进程,提升系统的稳定性和可靠性。
二、安装方式
1、CentOS 环境
- yum 安装(推荐):
- 首先确保安装了 epel 源,如果没有安装,执行命令:
yum install -y epel
- 安装 Supervisord:
yum install -y supervisor
2、Ubuntu 环境
- 直接使用 apt 安装:
apt-get install supervisor
3、Python 环境
- 使用 pip 安装:
-
安装 pip:
wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa33326" tar -xzvf pip-1.5.4.tar.gz cd pip-1.5.4 python setup.py install
-
使用 pip 安装 Supervisord:
pip install supervisor
- 使用easy_install安装
- easy_install 安装:
安装 python-setuptools:yum install python-setuptools
- 使用 easy_install 安装 Supervisord:
easy_install supervisor
综合比较,在有 yum
或 apt
包管理工具的系统中,推荐使用 yum(CentOS)
或 apt(Ubuntu)
安装,这种方式更便捷,且能自动处理依赖关系。
三、配置详解
默认配置文件位置
CentOS(yum 安装):/etc/supervisord.conf
Ubuntu(apt 安装):/etc/supervisor/supervisord.conf
主要参数说明
[unix_http_server]
file=/tmp/supervisor.sock :socket 文件路径。
chmod=0700 :socket 文件权限,默认 0700。
chown=nobody:nogroup :socket 文件所有者,格式为uid:gid,默认未设置。
[inet_http_server]
port=127.0.0.1:9001 :Web 管理后台运行的 IP 和端口
username=user :登录管理后台用户名。
password=123 :登录管理后台密码。
[supervisord]
logfile=/tmp/supervisord.log :默认日志文件路径。
logfile_maxbytes=50MB :日志文件大小,超出则进行轮转(rotate)。
logfile_backups=10 :日志文件保留备份数量,默认 10,设为 0 表示不备份。
loglevel=info :日志级别,可选debug、info、warn、trace等,默认info。
pidfile=/tmp/supervisord.pid :supervisord 的 pid 文件路径。
nodaemon=false :是否在前台启动,默认false,即以 daemon 方式启动。
minfds=1024 :可打开的文件描述符最小值,默认 1024。
minprocs=200 :可打开的进程数最小值,默认 200。
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock :通过 socket 连接 supervisord
[program:xx]
command=/opt/tomcat/bin/catalina.sh run :程序启动命令,需指定正确的可执行文件路径和启动参数。
autostart=true :在 supervisord 启动时是否自动启动该进程,默认true。
startsecs=10 :启动多少秒后,若进程状态为running则启动成功,默认 1 秒。
autorestart=true :程序退出后是否自动重启,可选unexpected(进程意外杀死后重启)、true(任何原因退出都重启)、false(不重启),默认unexpected。
startretries=3 :启动失败自动重试次数,默认 3 次。
user=tomcat :启动进程用户,默认root,建议使用非root用户增强安全性。
priority=999 :进程启动优先级,值越小越优先启动,默认 999。
redirect_stderr=true :是否将stderr重定向到stdout,默认false。
stdout_logfile_maxbytes=20MB :stdout日志文件大小,默认 50MB。
stdout_logfile_backups=20 :stdout日志文件备份数,默认 10。
stdout_logfile=/tmp/logs/catalina.out :stdout日志文件路径。
stopasgroup=false :进程被杀死时,是否向这个进程组发送stop信号,默认false。
killasgroup=false :向进程组发送kill信号(包括子进程),默认false。
包含其他配置文件
在[include]
部分,可指定一个或多个配置文件
例如:
files = relative/directory/*.ini
files = /etc/supervisor/conf.d/*.conf
这样可以将每个进程的配置单独放在一个文件中,便于管理和维护。一般会在/etc/supervisor
目录下创建conf.d
目录,用于存放各个进程的配置文件。
四、实际使用案例
Java 应用的启动进程管理
假设我们有一个 Java 应用,使用 Spring Boot 框架打包成了一个可执行的 JAR 文件,路径为/data/app.jar,且系统中已安装好 JDK,JAVA_HOME环境变量已正确设置。
在/etc/supervisor/conf.d/目录下创建一个配置文件,例如java-app.ini:
[program:java-app]
command=/usr/bin/java -jar /data/app.jar
environment=JAVA_HOME="/usr/local/jdk"
directory=/data
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/data/logs/app.out
stderr_logfile=/data/logs/app.err
redirect_stderr=true
user=appuser
重新加载 Supervisord 配置:
supervisorctl reread
supervisorctl update
使用supervisorctl命令管理 Java 应用进程:
查看进程:supervisorctl status java-app
启动进程:supervisorctl start java-app
停止进程:supervisorctl stop java-app
重启进程:supervisorctl restart java-app
Nginx 的启动进程管理
假设 Nginx 安装在/usr/local/nginx
目录下。
在/etc/supervisor/conf.d/
目录下创建nginx.ini
配置文件:
[program:nginx]
command=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
autostart=true
autorestart=true
startsecs=5
stopasgroup=true
killasgroup=true
stdout_logfile=/usr/local/nginx/logs/access.log
stderr_logfile=/usr/local/nginx/logs/error.log
重新加载 Supervisord
配置并启动 Nginx
进程:
supervisorctl reread
supervisorctl update
同样,可以使用supervisorctl
命令对 Nginx
进程进行状态查看、启动、停止和重启等操作。
五、Supervisor 的价值与应用场景
价值
- 进程守护:确保进程持续运行,当进程因各种原因(如程序错误、系统资源不足等)意外退出时,Supervisor
- 能自动重启进程,减少服务中断时间,提高系统稳定性。
- 简化管理:通过配置文件统一管理多个进程,无需编写复杂的启动脚本和监控脚本。可以方便地对进程进行启动、停止、重启等操作,提高管理效率。
- 日志管理:Supervisor 可自动管理进程的标准输出和标准错误日志,设置日志文件大小和备份数量,便于排查问题。
应用场景
- Web 应用服务器:管理各类 Web 应用程序,如基于 Java 的 Tomcat、Jetty,基于 Python 的 Flask、Django 应用(通过 Gunicorn 等服务器运行),以及 Nginx、Apache 等 Web 服务器进程。
- 后台服务进程:管理各种后端服务进程,如数据库服务器(如 MySQL 的辅助进程)、消息队列服务(如 RabbitMQ)等。
- 定时任务:对于一些需要定时执行的任务脚本,可使用 Supervisor 管理,确保任务按计划执行,若任务执行过程中出现异常退出,能自动重启。
- 通过上述对 Supervisord 的安装、配置及实际应用的介绍,希望能帮助大家更好地使用这个强大的进程管理工具,提升服务器和应用程序的管理效率与稳定性。