运维笔记 | 📅 2020-09-17 | linux supervisor
Supervisor: A Process Control System
Supervisor是一个进程管理工具,可以启动、关闭、重启和监视进程。
一般情况下,系统默认的软件源里就有:
sudo yum install supervisor
# 或者
sudo apt-get install supervisor
安装完成后,supervisor
会有两部分组成:一个是后台运行的服务叫 supervisord
,另一个是命令行工具叫 supervisorctl
。
通过下述命令
sudo systemctl start supervisord
# 或者
sudo service supervisord start
启动 supervisor
的后台服务。
主配置文件在:/etc/supervisor/supervisord.conf
这个配置文件一般不用管,其详细说明在这里:http://www.supervisord.org/configuration.html
如果有需要,可以看看主配置文件的这部分:inet_http_server,这部分配置提供了一个基于HTTP基础认证的Web管理界面,拥有基本的启动、停止、重启和观察日志的功能。官方举例如下:
[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123
如果需要supervisor对一个进程进行管理,则需要这部分配置:program:x
配置项很多,我列举一些常用的配置:
[program:cat]
command=/bin/cat
directory=/tmp
autostart=true
autorestart=true
environment=A="1",B="2"
stdout_logfile=/a/path
stderr_logfile=/a/path
逐行解释:
[program:cat] ; 这行设置了程序名称为 cat,supervisor通过此名称对此进程进行管理
command=/bin/cat ; 这行是此进程的主程序,可以直接带参数
directory=/tmp ; 这行是此进程的工作目录,程序中的相对目录以此为起点
autostart=true ; 这行指定程序是否随 supervisor 一起启动
autorestart=true ; 这行指定程序退出后是否由 supervisor 自动重启
environment=A="1",B="2" ; 这行指定程序运行的环境变量,不影响已经存在的系统环境变量
stdout_logfile=/a/path ; 指定程序从标准输出流输出的内容,应该存储于何处(文本文件)
stderr_logfile=/a/path ; 指定程序从标准错误流输出的内容,应该存储于何处(文本文件)
在主配置文件的末尾,一般会有一个 [include]
,这里指定了子配置文件的位置。CentOS系统一般是 /etc/supervisord.d/*.ini
,Ubuntu系统一般是 /etc/supervisord/conf.d/*.conf
。
这个配置表示主配置文件讲包含指定目录下的指定后缀名的文件。
一般实践里,我们会将 “程序配置” 中讲的 [program:x]
部分,写在子配置文件中。每一个被管理的进程,分别写入一个配置文件,这样方便管理。
管理操作,主要通过 supervisorctl
命令来完成。其提供了如下命令:
supervisorctl status //查看所有进程的状态
supervisorctl stop x //停止x
supervisorctl start x //启动x
supervisorctl restart x //重启x
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
上述 start
、stop
、restart
后跟的参数 x
指的是配置文件中 [program:x]
所指定的进程。或者也可以 supervisorctl status
来观察所有被管理进程的名称。
supervisorctl status
将输出所有被管理进程的 “名称”、“状态”、“详细信息”。
需要注意的是,在增加或者修改了配置文件后,需要 supervisorctl update
来使配置文件生效。
如果仅执行 supervisorctl
不加任何参数,则会进入 一个提示符为 supervisor\u003e
的交互式命令行。
此交互式命令行中,可以不加 supervisorctl
前缀,直接执行 start
、stop
、restart
等操作。
如果你在配置文件中指定了 stdout_logfile
那么就在这个参数指定的位置能看到程序输出的内容,或者执行 supervisorctl tail -f x
观察命名为 x
的程序的输出。这个操作当然也能在交互式命令行中使用。
Ctrl+C 组合键退出观察。