Supervisord
Supervisord 是用 Python 实现的一款非常实用的进程管理工具,supervisord 还要求管理的程序是非 daemon 程序,supervisord 会帮你把它转成 daemon 程序,因此如果用 supervisord 来管理 nginx 的话,必须在 nginx 的配置文件里添加一行设置 daemon off 让 nginx 以非 daemon 方式启动
-
安装
yum install python-setuptools easy_install supervisor echo_supervisord_conf > /etc/supervisord.conf mkdir /etc/supervisord.conf.d
-
修改配置 /etc/supervisord.conf
[include] files = /etc/supervisord.conf.d/*.conf
-
新建管理的应用
cd /etc/supervisord.conf.d vim golang-server.conf
配置文件:
[program:golang-server] directory = /data/go/golang-server command = /data/go/golang-servser/golang-server autostart = true startsecs = 5 user = root redirect_stderr = true stdout_logfile=/var/log/golang-server.log stderr_logfile=/var/log/golang-server.log
配置说明:
command:表示运行的命令,填入完整的路径即可。(编译后的执行文件路径)
autostart:表示是否跟随supervisor一起启动。
autorestart:如果该程序挂了,是否重新启动。
redirect_stderr :重定向输出的日志
stdout_logfile:终端标准输出重定向文件。
stderr_logfile:终端错误输出重定向文件。
directory:文件路径,不过貌似这个不写也没有关系,看到好多的博客里都没有写 -
启动supervisor
supervisord -c /etc/supervisord.conf
-
查看进程状态
supervisorctl
每列分别代表:programe名称、进程名称,进程状态、进程id,运行时间
如果没有输出进程状态,在当前状态下输入status试试 -
开机自启 Supervisord
vim 打开 /etc/rc.local 添加下面命令
/usr/local/bin/supervisord -c /etc/supervisord.conf
在添加前,先在终端测试一下命令是否能正常执行
如果不知道supervisord路径可以用 find / -name supervisord 或者 whereis supervisord 查看
Supervisord 管理
Supervisord 安装完成后有两个可用的命令行 supervisord 和 supervisorctl,命令使用解释如下:
- supervisorctl status
- supervisord,初始启动 Supervisord,启动、管理配置中设置的进程。
- supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx 为 [program:golang-server] 里配置的值,这个示例就是 olang-server。
- supervisorctl start programxxx,启动某个进程
- supervisorctl restart programxxx,重启某个进程
- supervisorctl stop groupworker: ,重启所有属于名为 groupworker 这个分组的进程(start,restart 同理)
- supervisorctl stop all,停止全部进程,注:start、restart、stop 都不会载入最新的配置文件。
- supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
- supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
说明 : 可以直接在系统shell中执行,也可以先执行supervisorctl,进入supervisorctl_shell中执行相应的命令。
遇到的问题
- ERROR (no such process)
执行启动命令,reload命令都是正常的,没有报错,查看进程状态的时候什么都没有显示,说明进程没有开启, 遂执行supervisorctl start golang-server命令,报错golang-server: ERROR (no such process)
解决问题 : 配置文件supervisor.conf中 ;[include]冒号去掉
参考
https://beego.me/docs/deploy/supervisor.md 配置文件
http://www.01happy.com/supervisor-golang-daemon/ 安装
https://thief.one/2018/06/01/1/ 启动&查看状态
https://blog.csdn.net/wangjianwanxiao/article/details/51007354 include问题
https://www.restran.net/2015/10/04/supervisord-tutorial/ 自启