一、命令简介
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
五、注意事项
- 配置文件格式:必须使用正确的 INI 格式,每个
[program:xxx]段定义一个进程。修改配置后需执行supervisorctl reload或supervisorctl update生效。 - 权限问题:确保 supervisord 进程及其子进程有适当的文件系统权限(如日志目录、工作目录等)。
- 环境变量:子进程默认不会继承 supervisord 的环境变量,需在配置中通过
environment选项显式设置。 - 日志管理:合理配置日志轮转,避免日志文件无限增长占用磁盘空间。
- 与系统服务集成:在生产环境中,建议通过 systemd 或 init 系统管理 supervisord 本身,以确保其高可用。
- 资源限制:可通过配置设置进程的资源限制(如 minfds, minprocs 等),防止资源泄露。
- 依赖包:supervisord 依赖 Python 和 meld3 包,确保它们已正确安装。
六、相关资源
PyPI 项目页面: https://pypi.python.org/pypi/supervisor https://pypi.python.org/pypi/meld3
GitHub 仓库:https://github.com/Supervisor/supervisor
通过以上配置和管理,supervisord 可以有效地将各种后台进程(如 Web 服务器、队列处理器、自定义脚本等)转化为稳定、可监控的守护进程,是服务运维中常用的轻量级进程管理方案。

1267

被折叠的 条评论
为什么被折叠?



