supervisorctl 是什么
supervisorctl 是进程管理工具 supervisor 的命令行客户端,用来查看状态、启停重启、跟踪日志。supervisor 以守护进程方式托管一批常驻脚本或不便写成 systemd 单元的应用,按 /etc/supervisord.d/*.ini 中的定义拉起进程,并在退出后自动重启。改完配置必须先 reread 再 update,新配置才会生效。
基本信息
| 所属 | supervisor(Python 实现,非内核组件) |
|---|---|
| 语法 | supervisorctl {status|start|stop|restart|tail} 名称 |
| 配置文件 | /etc/supervisord.conf 与 /etc/supervisord.d/*.ini |
| 前置条件 | supervisord 主进程本身处于运行状态 |
典型使用场景
- 托管以脚本方式启动的常驻进程,省去编写 systemd 单元
- 面板或容器环境中统一查看多个应用进程状态
- 应用异常退出后自动拉起,减少人工介入
- 只滚动重启某个 worker,不影响其它服务
- 实时跟踪托管进程的标准输出与错误输出
- 改完启动命令或环境变量后让配置真正生效
常用示例
常用示例
supervisorctl status # 查看全部托管进程状态
supervisorctl status app-worker # 只看单个进程
supervisorctl restart app-worker # 重启单个进程
supervisorctl stop all # 停止全部托管进程
supervisorctl tail -f app-worker # 实时跟踪该进程输出
supervisorctl tail app-worker stderr # 只看错误输出
supervisorctl reread # 重新读取配置文件
supervisorctl update # 按新配置增删改托管项常用子命令
| 子命令 | 作用 | 备注 |
|---|---|---|
| status | 列出状态与 PID | 最常用的入口 |
| start/stop/restart | 启动、停止、重启 | 可带进程名或 all |
| reread | 重新读取配置 | 只加载配置,不动运行中的进程 |
| update | 应用新配置 | 新增或删除托管项并处理变更项 |
| tail | 查看 stdout/stderr | -f 可持续跟踪输出 |
改完 ini 必须执行 reread 再 update,否则运行的还是旧命令。只做 restart 并不会让新配置生效,这是最常见的误区。
不要对托管进程直接 kill:supervisor 会按 autorestart 策略把它拉回来,看起来像「杀不死」。要改变行为应修改配置文件并 update。
同一台主机上 systemd 与 supervisor 可能并存:先用 ps --forest 看父进程确认进程由谁拉起,再决定去改哪个配置,否则会出现改了半天不生效的情况。