Supervisor使用详解

Supervisor 是一个用于管理和监控进程的开源工具,特别适合管理长期运行的进程或后台服务。它可以用来启动、停止、重启和监控进程,并且能够自动重新启动崩溃的进程。下面是 Supervisor 的详细使用说明。

1. 安装 Supervisor

ubuntu可以使用apt安装

apt install -y supervisor

或者通过 pip 进行安装:

pip install supervisor

安装后,主要命令是 supervisord(管理进程的服务)和 supervisorctl(控制和管理进程的客户端)。

2. 配置文件

安装完成后,Supervisor 需要一个配置文件来定义需要管理的进程。默认配置文件路径为 /etc/supervisord.conf,可以使用 echo_supervisord_conf 命令生成默认的配置文件。

echo_supervisord_conf > /etc/supervisord.conf

你可以根据需要修改生成的配置文件。以下是一个简单的配置文件示例:

[unix_http_server]
file=/tmp/supervisor.sock   ; Unix socket 文件路径

[supervisord]
logfile=/tmp/supervisord.log ; 日志文件路径
pidfile=/tmp/supervisord.pid ; PID 文件路径
childlogdir=/tmp             ; 子进程日志目录

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 通过 Unix socket 进行通信

[include]
files = /etc/supervisor/conf.d/*.conf  ; 通过包含其他配置文件来管理多个服务

3. 定义要管理的进程

supervisord.conf 中,可以添加具体要管理的程序。在 /etc/supervisor/conf.d/ 目录下,可以为每个进程创建一个独立的配置文件。以下是一个配置文件示例,假设我们要管理一个名为 myapp 的 Python 应用:

[program:myapp]
command=/usr/bin/python /path/to/myapp.py  ; 启动程序的命令
autostart=true                             ; supervisord 启动时自动启动
autorestart=true                           ; 程序崩溃后自动重启
stderr_logfile=/var/log/myapp.err.log      ; 错误日志路径
stdout_logfile=/var/log/myapp.out.log      ; 标准输出日志路径
user=nobody                                ; 运行该程序的用户

4.  Supervisor操作

systemctl enable supervisor #设置开机自启
systemctl start supervisor  #启动
sudo supervisorctl update   #更新配置
sudo supervisorctl status   #查看supervisor状态

通过pip安装的,需要手动启动 supervisord

supervisord -c /etc/supervisord.conf

该命令会根据配置文件中的设定启动 supervisord 进程,并且启动所有配置中指定的子进程。

5. 使用 supervisorctl 管理进程

supervisorctl 是用于与 supervisord 交互的命令行工具。它可以用来查看进程状态、启动、停止和重启进程等。

supervisorctl status          # 查看所有受管理的进程状态
supervisorctl stop myapp      # 停止 myapp
supervisorctl start myapp     # 启动 myapp
supervisorctl restart myapp   # 重启 myapp
supervisorctl reload          # 从新加载配置

如果你想对所有的服务进行操作,可以使用 all 关键字:

supervisorctl stop all        # 停止所有进程
supervisorctl start all       # 启动所有进程

6. 自动重启与日志

Supervisor 支持自动重启进程。如果一个进程意外退出,它可以根据配置文件中的 autorestart=true 选项自动重新启动。

Supervisor 还可以方便地管理日志。每个进程的标准输出和错误输出都可以分别配置到不同的日志文件中。

7. 进程优雅停止

当你停止 supervisord 或一个具体的进程时,Supervisor 默认会发送 SIGTERM 信号给进程,允许进程在结束前执行清理操作。如果进程没有在指定时间内停止,Supervisor 会发送 SIGKILL 信号强制终止进程。你可以通过 stopwaitsecs 来指定等待时间:

stopwaitsecs=10 ; 等待 10 秒让进程优雅退出

8. 常见问题排查

  • 配置文件更改后不生效:修改配置文件后需要运行 supervisorctl reread 来重新读取配置,并使用 supervisorctl update 应用更改。
  • 进程频繁重启:可能是程序本身退出状态异常,或者配置中 startretries 设置次数太多。检查日志,确保进程的退出状态符合预期。

9. Supervisor API

Supervisor 还提供 XML-RPC 接口,可以通过程序访问 Supervisor 的状态和控制进程,适合需要通过 HTTP 或远程管理的场景。

总结

Supervisor 是一个功能强大且易于使用的进程管理工具,特别适用于需要长期运行的服务。通过合理配置,它可以实现自动重启、日志管理和进程状态监控,使运维工作更加简单高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值