https://github.com/ochinchina/supervisord
http://supervisord.org/configuration.html

go generate
GOOS=linux go build -tags release -a -ldflags "-linkmode external -extldflags -static" -o supervisord
systemctl enable supervisord  # supervisord -c /etc/supervisord.conf -d
# supervisor.conf
# 查找路径:
#   $CWD/supervisord.conf; $CWD/etc/supervisord.conf
#   /etc/supervisord.conf; /etc/supervisor/supervisord.conf
#   ../etc/supervisord.conf; ../supervisord.conf
# http服务,提供web管理界面
[inet_http_server]
port=0.0.0.0:9001
username=user
password=123

[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=50MB  # 0表示不限制大小
logfile_backups=8  # 日志备份数量,0表不备份
loglevel=info
nodaemon=false

[supervisorctl]
serverurl=http://127.0.0.1:9001  # 通过http方式连接supervisord
[include]
files=*.ini  # 包含其他配置文件,如下方的程序xx

[program-default]  # 公共参数
environment=ENV="/xx",VAR2=""

[program:xx]  # 被管理的一个进程
command=/opt/tomcat.sh run
directory=/opt
autostart=true  # supervisord启动时也自动启动
autorestart=true  # 程序退出后自动重启; unexpected:进程被意外杀死后才重启
startretries=3  # 启动失败自动重试次数,默认3
startsecs=8  # 启动8s后没有异常退出旧表示正常启动,默认1s
user=tomcat  # 以哪个用户启动进程
priority=9  # 进程启动的优先级,值小的优先启动
redirect_stderr=true  # 把stderr重定向到stdout,默认false
stdout_logfile=/opt/tomcat.log, /dev/stdout, syslog  # 也可指定stderr_logfile; 此处指定多个输出
stdout_logfile_maxbytes=20MB  # 默认50MB
stdout_logfile_backups=8
stopasgroup=false  # 进程被杀死时是否向这个进程组发送stop信号,默认false
killasgroup=false  # 向进程发送kill信号时包括子进程,默认false
restartpause=2s  # stop后再次start这之间的间隔
restart_when_binary_changed=true  # 默认false

supervisorctl status  # 查看所有进程的状态
supervisorctl stop es
supervisorctl start es
supervisorctl restart es