之前介绍了Supervisor的特征,使用方式等基本内容,当时我也是刚使用,感觉流程比较顺利,接着就需要写个shell脚本将Supervisor的安装、配置新建、启动关闭等内容自动化,遇到了一些使用问题,这里记录一下。
unix:///var/run/supervisor.sock no such file
在使用supervisor时,需要注意,supervisor由两个部分组成,通常启动服务端部分就可以了,即使用如下命令则可
supervisord -c /x1_game/fla843/src/supervisord.conf
不要与下面命令搞混了
supervisorctl -c /x1_game/fla843/src/supervisord.conf
该命令用于启动客户端交互模式,在交互模式下可以直接使用下面的命令
> status # 查看程序状态
> stop program_name # 关闭 program_name 程序
> start program_name # 启动 program_name 程序
> restart program_name # 重启 program_name 程序
> reread #
读取有更新(增加)的配置文件,不会启动新添加的程序,也不会重启任何程序
> reload # 载入最新的配置文件,停止原有的进程并按照新的配置启动
> update #
重启配置文件修改过的程序,配置没有改动的进程不会收到影响而重启
但其实完全不必去使用,直接使用supervisorctl + 对应的指令则可,如下:
$ supervisorctl status
$ supervisorctl stop program_name
$ supervisorctl start program_name
$ supervisorctl restart program_name
$ supervisorctl reread
$ supervisorctl reload
$ supervisorctl update
当然出现 unix:///var/run/supervisor.sock no such file
的原因还有一个常见的原因就是没有使用root权限运行supervisorctl,造成这一现象,很可能是 /var
目录只有root才有相应的写权限,你可以使用 sudo supervisord-c xxx.conf
的形式启动supervisord。
http://localhost:9001 refused connection
该错误出现也是非常奇怪,本人第一次安装使用supervisord时,并没有出现这个错误,查询了相关资料,说3.0后supervisord就需要修改相应的配置,以开启相应的端口,需要修改的配置内容如下:
[inet_http_server]
port =
127.0.0.1:9001
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
然后将已经开启的supervisor直接kill掉,再次启动,则不会出现这个错误了
封装多一层
工作需求,这种东西还是要通过shell封装一层,更加方便使用
这里提供安装、启动与关闭的脚本供于参考
安装脚本inst.sh
#!/bin/sh
sudo pip install supervisor
服务启动脚本start.sh
#! /bin/bash
isrun(){
psid=`ps aux | grep supervisord | grep -v grep | wc -l`
echo ${psid}
echo "$1"
if
[ ${psid}
-gt "$1"
]
;then
echo "supervisord is running!"
exit
0
fi
}
if
[
"$1"
]
;then
# if input parameter has supervisord
result=$(echo $1 | grep "supervisord")
if
[[
"$result"
!=
""
]]
;then
isrun 2
else
isrun 0
fi
# the config file path is specified
supervisord -c "$1"
else
isrun 0
supervisord
fi
echo "supervisord start success"
使用supervisorctl工具
#! /bin/bash
psid=`ps aux | grep "superviosrd" | grep -v "grep" | wc -l`
if
[ ${psid}
-lt 1
]
;then
echo "superviosrd is not run, place start superviosrd first!"
exit
0
fi
supervisorctl "$1"
"$2"
关闭supervisor服务,这种关闭方式,会将这个服务都关闭
#! /bin/bash
psid=`ps aux | grep "supervisord" | grep -v "grep" | wc -l`
echo ${psid}
if
[ ${psid}
-eq 0
]
;then
echo "superviosrd is close!"
exit
0
fi
# supervisor will close and all child process also will close
supervisorctl shutdown