Supervisor 是 Linux/Unix 下常用的进程管理工具,用来把普通的命令行程序托管成后台守护进程,并在进程意外退出时自动拉起。日常运维中打交道最多的就是它的客户端命令 supervisorctl。本文把常用命令整理成一份速查,并说明 reload 与 update 这两个最容易混淆的命令。
一、基础命令
查看版本号,用于确认安装是否成功以及当前版本:
sudo supervisorctl version查看所有被托管进程的运行状态,输出形如 进程名 RUNNING pid 1234, uptime 0:10:32:
sudo supervisorctl status二、进程管理
单个进程
把 [进程名] 换成 supervisorctl status 里显示的进程名即可:
# 启动进程
sudo supervisorctl start [进程名]
# 停止进程
sudo supervisorctl stop [进程名]
# 重启进程
sudo supervisorctl restart [进程名]全部进程
把进程名换成关键字 all,即可对配置文件中所有进程批量操作:
# 启动所有进程
sudo supervisorctl start all
# 重启所有进程
sudo supervisorctl restart all
# 停止所有进程
sudo supervisorctl stop all三、配置管理
这两个命令都用于让修改后的配置文件生效,但行为完全不同,是实际使用中最容易用错的地方。
reload:重新载入配置文件
sudo supervisorctl reload它会重新读取全部配置文件,并重启 supervisor 自身。因为 supervisor 是被重启的,所有子进程都会跟着被重启一遍,未改动的进程也会受影响。修改配置文件后必须执行 reload(或下面的 update),否则改动不生效。
update:按需更新进程
sudo supervisorctl update它同样会读取最新配置,但只做增量处理:
- 新增的进程会被启动;
- 配置有改动的进程会被重启;
- 配置没有改动的进程不受影响,不会被重启。
因此日常改动配置后,优先用 update,可以把影响范围控制到最小;只有配置结构变动较大或 update 未按预期生效时,才用 reload 全量重载。
四、速查表
| 命令 | 作用 | 影响范围 |
|---|---|---|
supervisorctl version | 查看版本 | 无 |
supervisorctl status | 查看所有进程状态 | 无 |
supervisorctl start [进程名] | 启动指定进程 | 单个进程 |
supervisorctl stop [进程名] | 停止指定进程 | 单个进程 |
supervisorctl restart [进程名] | 重启指定进程 | 单个进程 |
supervisorctl start all | 启动所有进程 | 全部进程 |
supervisorctl stop all | 停止所有进程 | 全部进程 |
supervisorctl restart all | 重启所有进程 | 全部进程 |
supervisorctl reload | 重新载入配置文件(重启 supervisor 自身) | 全部进程 |
supervisorctl update | 按最新配置增量更新(只重启有改动的进程) | 有改动的进程 |
五、注意事项
- 命令通常需要
sudo权限,普通用户执行会提示权限不足;如果提前把用户加入了 supervisor 的配置,则可以省略。 - 进程名以
supervisorctl status的输出为准,配置里的[program:xxx]中的xxx就是进程名。 - 修改配置文件后必须执行
reload或update,否则改动不会生效。 - 只想让改动生效又不想打断其余服务时,用
update而不是reload。
小结
日常高频使用的其实只有四条:status 看状态、restart [进程名] 重启单个服务、update 让配置改动生效、reload 全量重载。记住 reload 与 update 的区别——前者重启 supervisor 自身并波及所有进程,后者只处理有改动的进程,就能避免误伤线上服务。
评论区