Centos平台使用 Supervisord 管理后台进程

时间:2022-12-17 14:55:43

经验来说 pip安装是好的

安装pip

yum install python-setuptools
easy_install pip
pip install supervisor
//生成必要的配置文件
echo_supervisord_conf > supervisord.conf

//将配置文件统一放在/etc下
cp supervisord.conf /etc/supervisord.conf

//为了不将所有新增配置信息全写在一个配置文件里,我们新建一个文件夹,每个配置信息新增一个配置文件,相互隔离
mkdir /etc/supervisord.d/

修改配置文件
vi /etc/supervisord.conf
加入以下配置信息

[include]
files = /etc/supervisord.d/*.conf 

在重启之前随便创建一个挂在后台的命令

vi /etc/supervisord.d/tail.conf

[program:tail1]                                                                            
command=tail -f  /etc/supervisord.conf   ;常驻后台的命令
autostart=true                           ;是否随supervisor启动
autorestart=true                         ;是否在挂了之后重启,意外关闭后会重启,比如kill掉!
startretries=3                           ;启动尝试次数
stderr_logfile=/tmp/tail1.err.log        ;标准输出的位置
stdout_logfile=/tmp/tail1.out.log        ;标准错误输出的位置

注意在添加go语言的时候需要添加上他的gopath!!!

[program:data_a]
command=go run /home/centos/go/src/DataServer/main.go
directory=/home/centos/go/src/DataServer/
environment=GOPATH=/home/centos/go/
user=root
autorestart=true
...

更多详细的配置,请参考http://supervisord.org/

操作

配置在 /etc/supervisord.conf(或其他任意有权限访问的文件),然后启动 supervisord(通过 -c 选项指定配置文件路径,如果不指定会按照这个顺序查找配置文件: CWD/supervisord.conf, CWD/etc/supervisord.conf, /etc/supervisord.conf):

启动 supervisord -c /etc/supervisord.conf
控制 supervisorctl -c /etc/supervisord.conf

Supervisorctl 是 supervisord 的一个命令行客户端工具,启动时需要指定与 supervisord 使用同一份配置文件,否则与 supervisord 一样按照顺序查找配置文件。

上面这个命令会进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了:

> status # 查看程序状态
> stop usercenter # 关闭 usercenter 程序
> start usercenter # 启动 usercenter 程序
> restart usercenter # 重启 usercenter 程序
> reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
> update # 重启配置文件修改过的程序
> reload # 重新加载文件重启

上面这些命令都有相应的输出,除了进入 supervisorctl 的 shell 界面,也可以直接在 bash 终端运行:

$ supervisorctl status
$ supervisorctl stop usercenter
$ supervisorctl start usercenter
$ supervisorctl restart usercenter
$ supervisorctl reread
$ supervisorctl update
$ supervisorctl reload #重新加载文件重启

除了 supervisorctl 之外,还可以配置 supervisrod 启动 web 管理界面,这个 web 后台使用 Basic Auth 的方式进行身份认证。
如果想通过web查看管理的进程,加入以下代码,监听9001,用户user,密码123

[inet_http_server] 
port=9001
username=user 
password=123

查看一下是否监听

lsof -i:9001
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
superviso 7782 root    4u  IPv4 74522612      0t0  TCP *:etlservicemgr (LISTEN)