最近在试图将一个游戏私服的服务分开并容器化,其中服务的启动是通过supervisord启动的,所以记录一下supervisord的使用方法。

supervisord 是一个用 Python 编写的进程监控和管理工具,可以用来自动启动、停止、重启和监控进程。以下是其主要使用方法:

安装 supervisord

# 使用 pip 安装
pip install supervisor

# 或使用系统包管理器安装
sudo apt-get install supervisor  # Ubuntu/Debian
sudo yum install supervisor      # CentOS/RHEL

配置文件

  1. 生成默认配置文件

echo_supervisord_conf > /etc/supervisord.conf
  1. 主要配置项

  • [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 进行管理。

注意事项

  1. 确保被管理的程序在前台运行(不自动转为守护进程)

  2. 配置正确的日志路径和权限

  3. 设置合适的自动重启策略

  4. 注意运行用户权限问题

以他人的幸福为幸福,以他人的享乐为享乐。