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 安装:
  1. 安装 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​
    
  2. 使用 pip 安装 Supervisord:

    pip install supervisor​
    

  • 使用easy_install安装
  1. easy_install 安装:​
    安装 python-setuptools:
    yum install python-setuptools​
    
  2. 使用 easy_install 安装 Supervisord:
    easy_install supervisor​
    

综合比较,在有 yumapt 包管理工具的系统中,推荐使用 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=10stdout_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=5stopasgroup=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 的安装、配置及实际应用的介绍,希望能帮助大家更好地使用这个强大的进程管理工具,提升服务器和应用程序的管理效率与稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值