Supervisor管理GO程序

安装

apt-get install supervisor

使用说明

supervisor配置文件:/etc/supervisor/supervisord.conf 子进程配置文件路径:/etc/supervisor/conf.d/

常用命令说明

# 查看所有进程的状态
supervisorctl status
# 停止iot
supervisorctl stop iot
# 启动iot
supervisorctl start iot
# 重启iot
supervisorctl restart iot
# 配置文件修改后使用该命令加载新的配置
supervisorctl update
# 重新启动配置中的所有程序
supervisorctl reload

配置GO进程

[program:iot]
# 脚本目录
directory=/opt/iot
# 脚本执行命令
command=/opt/iot/main
# 日志输出
stdout_logfile=/opt/iot/supervisor/main.log
# supervisor启动的时候是否随着同时启动,默认True
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true

常见问题

  1. unix:///var/run/supervisor.sock no such file

问题描述:安装好supervisor没有开启服务直接使用supervisorctl报的错

解决办法:supervisord -c /etc/supervisord.conf

  1. command中指定的进程已经起来,但supervisor还不断重启

问题描述:command中启动方式为后台启动,导致识别不到pid,然后不断重启,这里使用的是elasticsearch,command指定的是$path/bin/elasticsearch -d

解决办法:supervisor无法检测后台启动进程的pid,而supervisor本身就是后台启动守护进程,因此不用担心这个

  1. 启动了多个supervisord服务,导致无法正常关闭服务

问题描述:在运行supervisord -c /etc/supervisord.conf之前,直接运行过supervisord -c /etc/supervisord.d/xx.conf导致有些进程被多个superviord管理,无法正常关闭进程。

解决办法:使用ps -fe | grep supervisord查看所有启动过的supervisord服务,kill相关的进程。