supervisord 命令介绍和使用案例
supervisord
是一个用 Python 编写的进程管理工具,用于监控和管理 Linux 系统中的进程。它可以将普通的命令行进程转变为后台守护进程(daemon),并监控进程状态,在进程异常退出时自动重启。它通过 fork/exec 的方式把被管理的进程当作自己的子进程来启动。
主要功能:
- 进程管理: 能够启动、停止、重启和关闭进程.
- 自动重启: 监控进程状态,并在进程崩溃时自动重启.
- 后台运行: 将普通命令行进程转变为后台守护进程.
- 用户管理: 可以为
supervisord
或每个子进程设置一个非 root 用户,该用户可以管理其对应的进程. - 日志管理: 能够记录进程的运行日志,方便问题排查
安装部署
命令参数
配置:
创建配置文件: 使用 echo_supervisord_conf
命令创建配置文件模板,例如 echo_supervisord_conf > /etc/supervisord.conf
. 也可以自定义配置文件路径,启动 supervisord
时使用 -c
参数指定.
配置任务: 修改 supervisord.conf
文件,添加需要管理的进程配置. 建议将进程配置文件放在 /etc/supervisor/conf.d/
目录下,并在 supervisord.conf
中使用 include
引入.
[program:程序名称]
command=启动命令
directory=程序启动目录
user=哪个用户启动
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile = /data/logs/usercenter_stdout.log ; stdout 日志文件
- 配置 HTTP 服务 (可选): 开启 HTTP 服务可以通过 Web 页面查看和管理任务。 修改
supervisord.conf
文件,打开inet_http_server
配置项. -
[inet_http_server] port = 127.0.0.1:9001 username = xxx password = xxx
常用命令:
- 启动 supervisord:
supervisord -c /etc/supervisord.conf
(指定配置文件) 或直接运行supervisord
. - 使用 supervisorctl 管理:
- 进入 supervisorctl 界面:
supervisorctl -c /etc/supervisord.conf
. - 常用 supervisorctl 命令:
help
: 查看帮助.status
: 查看程序状态.stop <program_name>
: 关闭指定程序.start <program_name>
: 启动指定程序.restart <program_name>
: 重启指定程序.tail -f <program_name>
: 查看程序日志.reread
: 读取有更新的配置文件,不会启动新添加的程序.update
: 重启配置文件修改过的程序.shutdown
: 关闭 supervisord 守护进程和所有子进程
- 进入 supervisorctl 界面:
- 直接在 shell 中使用 supervisorctl 命令:
supervisorctl status
,supervisorctl stop <program_name>
, 等.
使用案例:
启动测试案例
创建 sh 配置文件 /etc/supervisord.d/meng.conf
:
[program:meng]
command=/bin/bash -f /root/meng.sh -l /root/meng.log
numprocs=1
autostart=true
autorestart=true
log_stdout=true
log_stderr=true
重新加载配置并启动
supervisorctl reread
supervisorctl update
注意事项:
- 确保配置文件路径正确.
- 使用
visudo
命令编辑/etc/sudoers
文件,避免配置错误. - 使用
supervisorctl
命令时,需要指定与supervisord
相同的配置文件. - 经常查看日志文件 (
supervisord
日志和各个 program 的日志文件) ,以便排查问题. - 用
supervisord
管理 gunicorn 时,gunicorn 的 daemon 选项需要设置为 False.