Linux supervisord 进程管理工具详解:守护进程自动重启实战

一、命令简介

supervisord 是一个基于 Python 开发的进程管理工具,用于在类 Unix 系统(如 Linux)中配置、启动、停止和监控后台服务或常驻进程。它可以将一个普通的命令行进程转换为后台守护进程,并在进程异常退出时自动重启,确保服务的持续可用性。supervisord 通常与 supervisorctl 命令行客户端配合使用,实现对进程的集中管理。

二、语法格式

启动 supervisord 守护进程的基本语法为:

bash

运行

supervisord [options]

主要组件说明:

supervisord:服务端守护进程,负责启动、管理配置中定义的子进程。 supervisorctl:客户端命令行工具,用于控制 supervisord 管理的进程(如 start, stop, restart 等)。 配置文件:默认为 /etc/supervisor/supervisord.conf,用于定义要管理的程序及其运行参数。

三、常用选项及说明

表格

选项说明
-c, --configuration FILENAME指定配置文件路径(默认为 /etc/supervisor/supervisord.conf)。
-n, --nodaemon在前台运行,不作为守护进程(常用于调试)。
-h, --help显示帮助信息并退出。
-v, --version显示版本信息并退出。
-u, --user USER以指定用户身份运行 supervisord(需 root 权限)。
-d, --directory DIRECTORY在启动前切换到指定目录。
-l, --logfile FILENAME指定日志文件路径。
-y, --logfile_maxbytes BYTES设置日志文件最大字节数。
-z, --logfile_backups NUM设置保留的日志备份数量。
-e, --loglevel LEVEL设置日志级别(如 info, warn, error, debug)。
-j, --pidfile FILENAME指定 PID 文件路径。
-m, --umask UMASK设置进程的 umask(八进制格式)。
-a, --childlogdir DIRECTORY设置子进程日志目录。

四、示例用法

4.1 安装

在基于 Debian/Ubuntu 的系统上安装:

bash

运行

sudo apt-get update
sudo apt-get install supervisor

安装后,系统会自动创建默认配置文件 /etc/supervisor/supervisord.conf 和配置目录 /etc/supervisor/conf.d/。

4.2 配置一个后台服务

在 /etc/supervisor/conf.d/ 目录下为你的应用创建配置文件,例如 myapp.conf:

ini

[program:myapp]
command=/usr/bin/gunicorn -w 4 myapp:app ; 要执行的命令
directory=/var/www/myapp ; 执行命令时的工作目录
user=www-data ; 运行进程的用户
autostart=true ; 随 supervisord 启动而启动
autorestart=true ; 进程退出后自动重启
redirect_stderr=true ; 将标准错误重定向到标准输出
stdout_logfile=/var/log/myapp.log ; 标准输出日志路径
environment=KEY="value" ; 设置环境变量

4.3 启动 supervisord 服务

安装后,supervisord 通常作为系统服务运行。启动并设置开机自启:

bash

运行

sudo systemctl start supervisor
sudo systemctl enable supervisor

或直接使用 supervisord 命令(指定配置文件):

bash

运行

sudo supervisord -c /etc/supervisor/supervisord.conf

4.4 使用 supervisorctl 管理进程

bash

运行

# 启动一个配置的程序
sudo supervisorctl start myapp
# 停止一个程序
sudo supervisorctl stop myapp
# 重启一个程序
sudo supervisorctl restart myapp
# 查看所有程序状态
sudo supervisorctl status
# 重新加载配置文件(当添加或修改配置后)
sudo supervisorctl reload
# 更新配置(仅重新加载有变化的配置)
sudo supervisorctl update
# 进入交互式控制台
sudo supervisorctl

4.5 查看日志

bash

运行

# 查看 supervisord 主日志
sudo tail -f /var/log/supervisor/supervisord.log
# 查看特定程序的输出日志
sudo tail -f /var/log/myapp.log

五、注意事项

  1. 配置文件格式:必须使用正确的 INI 格式,每个 [program:xxx] 段定义一个进程。修改配置后需执行 supervisorctl reloadsupervisorctl update 生效。
  2. 权限问题:确保 supervisord 进程及其子进程有适当的文件系统权限(如日志目录、工作目录等)。
  3. 环境变量:子进程默认不会继承 supervisord 的环境变量,需在配置中通过 environment 选项显式设置。
  4. 日志管理:合理配置日志轮转,避免日志文件无限增长占用磁盘空间。
  5. 与系统服务集成:在生产环境中,建议通过 systemd 或 init 系统管理 supervisord 本身,以确保其高可用。
  6. 资源限制:可通过配置设置进程的资源限制(如 minfds, minprocs 等),防止资源泄露。
  7. 依赖包:supervisord 依赖 Python 和 meld3 包,确保它们已正确安装。

六、相关资源

官方文档:http://supervisord.org/

PyPI 项目页面: https://pypi.python.org/pypi/supervisor https://pypi.python.org/pypi/meld3

GitHub 仓库:https://github.com/Supervisor/supervisor

通过以上配置和管理,supervisord 可以有效地将各种后台进程(如 Web 服务器、队列处理器、自定义脚本等)转化为稳定、可监控的守护进程,是服务运维中常用的轻量级进程管理方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿成学长_Cain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值