环境: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