环境:centos7.2

软件:supervisor

背景:
公司有一个app后台管理程序需要部署,该程序是用go语言编写的二进制文件,后台需要持续运行这个二进制文件,保证服务的持续运行。

方案 1:
直接采用 nohup ./app_admin &后台运行方式,该方式存在一个缺点,如果服务器重启后,或者程序运行出错的话,服务就会终止,这种方式不稳定。
方案 2:
采用supervisor进程管理方式守护go语言的二进制文件运行,保证程序的持续运行。

一、 安装supervisor

# yum install python-setuptools
# easy_install pip
# pip install supervisor  -- 或者-- easy_install supervisor
# mkdir /etc/supervisor/
安装完成之后,在/etc/supervisor目录下生成配置文件
# echo_supervisord_conf>/etc/supervisor/supervisord.conf
如果需要卸载supervisor 执行 #  pip uninstall supervisor

修改supervisor配置文件

vi /etc/supervisor/supervisord.conf

把末尾的include去掉;添加配置文件

[include]
files = /etc/supervisor/conf.d/*.ini

conf.d文件夹中的app_admin.ini配置文件如下

[root@centos]# cat appadmin.ini 

[program:appadmin]
process_name=%(program_name)s_%(process_num)02d
command=nohup /data/appadmin/app_admin
directory=/data/appadmin     ##程序的目录地址最好要添加,要不然会报错,找不到路径
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/etc/supervisor/logs/appadmin.log  #日志文件

推荐这条命令

或者command=bash /data/appadmin/app_admin

一切准备完毕后 执行

supervisord -c /etc/supervisor/supervisord.conf

启动supervisor,即可完成程序的持续运行!

运行 supervisorctl命令即可查看程序的运行状态

[root@appadmin conf.d]# supervisorctl
appadmin:appadmin_00             RUNNING   pid 2375, uptime 0:26:40
supervisor>

一些supervisor的常用命令

重载supervisor
进入supervisor 命令-->  #supervisorctl
查看命令           -->  #help
重载项目           -->  #reload
查看状态           -->  #status
完成!

二、设置supervisor开机自起:

最新方式:

vi supervisord.service

# 写入如下文件

[Unit] 
Description=Supervisor daemon

[Service] 
Type=forking 
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf 
ExecStop=/usr/bin/supervisorctl shutdown 
ExecReload=/usr/bin/supervisorctl reload 
KillMode=process 
Restart=on-failure 
RestartSec=42s

[Install] 
WantedBy=multi-user.target 


将文件拷贝到/usr/lib/systemd/system/

cp supervisord.service /usr/lib/systemd/system/ 
启动服务

systemctl enable supervisord 
验证一下是否为开机启动

systemctl is-enabled supervisord

如下可能失效:
重启服务器后,发现supervisor开机启动,于是只好手动添加脚本 实现开机启动

编辑sh文件并给予权限

[root@centos]# vi /etc/rc.d/sh/appadmin.sh 
#!/bin/bash
# 开机启动supervisor
sleep 1
supervisord -c /etc/supervisor/supervisord.conf


chmod +x /etc/rc.d/sh/appadmin.sh

编辑/etc/rc.d/rc.local 加入开机启动

[root@appadmin conf.d]# vi /etc/rc.d/rc.local 
#!/bin/bash
touch /var/lock/subsys/local
#开机启动supervisor脚本
/etc/rc.d/sh/appadmin.sh

chmod +x /etc/rc.d/rc.local

重启服务器后,即可看到已经有 app_admin在运行中。

至此,所有操作进行完毕

在ubuntu下设置开机启动

在/etc/init.d/目录下创建一个sh文件

vi  /etc/init.d/supervisor.sh
#!/bin/sh
### BEGIN INIT INFO
# Provides:          php_fastcgi.sh
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the php_fastcgi daemon
# Description:       starts php_fastcgi using start-stop-daemon
### END INIT INFO


# 开机启动supervisor
supervisord -c /etc/supervisor/supervisord.conf

exit 0

添加上面的脚本,前面一点要添加,否则会报错,

之后运行如下命令添加到开机启动,后面的数字越高,代表越优先

sudo update-rc.d supervisor.sh defaults 99