最近在试图将一个游戏私服的服务分开并容器化,其中服务的启动是通过supervisord启动的,所以记录一下supervisord的使用方法。
supervisord 是一个用 Python 编写的进程监控和管理工具,可以用来自动启动、停止、重启和监控进程。以下是其主要使用方法:
安装 supervisord
# 使用 pip 安装
pip install supervisor
# 或使用系统包管理器安装
sudo apt-get install supervisor # Ubuntu/Debian
sudo yum install supervisor # CentOS/RHEL配置文件
生成默认配置文件:
echo_supervisord_conf > /etc/supervisord.conf主要配置项:
[unix_http_server]- Unix socket 配置[inet_http_server]- HTTP 服务器配置(可选)[supervisord]- 主进程配置[supervisorctl]- 客户端配置[program:xxx]- 被管理的程序配置
基本命令
# 启动 supervisord
supervisord -c /etc/supervisord.conf
# 使用 supervisorctl 管理进程
supervisorctl status # 查看状态
supervisorctl start <name> # 启动指定程序
supervisorctl stop <name> # 停止指定程序
supervisorctl restart <name> # 重启指定程序
supervisorctl reload # 重新加载配置文件
supervisorctl shutdown # 关闭 supervisord配置被管理的程序
在配置文件中添加 [program:xxx] 部分:
[program:myapp]
command=/path/to/myapp ; 启动命令
directory=/path/to/workdir ; 工作目录
autostart=true ; 是否自动启动
autorestart=true ; 是否自动重启
startretries=3 ; 启动失败重试次数
stderr_logfile=/var/log/myapp.err.log ; 错误日志路径
stdout_logfile=/var/log/myapp.out.log ; 输出日志路径
user=myuser ; 运行用户常用操作
添加新程序后重新加载配置:
supervisorctl reread
supervisorctl update查看日志:
supervisorctl tail <program_name> # 查看 stdout 日志
supervisorctl tail -f <program_name> # 实时查看日志
supervisorctl tail <program_name> stderr # 查看 stderr 日志Web 管理界面
在配置文件中启用 inet_http_server:
[inet_http_server]
port=127.0.0.1:9001
username=user
password=pass然后可以通过浏览器访问 http://127.0.0.1:9001 进行管理。
注意事项
确保被管理的程序在前台运行(不自动转为守护进程)
配置正确的日志路径和权限
设置合适的自动重启策略
注意运行用户权限问题