目录
一、使用场景
二、具体配置
1.安装supervisor
2.配置supervisor [program]
3.配置systemctl
三、命令简述
具体场景(可以拆分):
案例描述:
启动流程:
机器开启 → systemctl启动supervisord → supervisord自动启动sidecar → systemctl调用脚本 → supervisord启动gateway
可以使用在云弹性伸缩自动生成机器时,按要求启动项目等等场景。
supervisor:用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
安装(Centos下):
yum install python-setuptools
easy_install supervisor
测试是否安装成功:
echo_supervisord_conf
创建配置文件(如果没权限,可以先创建文件,再move到etc下):
echo_supervisord_conf > /etc/supervisord.conf
概述:配置文件supervisord.conf,目的是配置supervisor托管子进程的方式。
(1)执行命令编辑文件
vim /etc/supervisord.conf
(2)在配置文件后增加两个 [program]
[program:sidecar] #子进程名称
command = java -jar /data/application/sidecar/sidecar-0.0.1-SNAPSHOT.jar #启动命令
autostart=true #立即启动
autorestart=true #自动重启
startsecs= 1 #重启多久视为启动成功
startretries= 5 #启动失败重试次数
stdout_logfile = /var/log/supervisor/sidecar.log #进程日志打印位置
stderr_logfile = /var/log/supervisor/sidecar.err.log #进程错误日志打印位置
[program:gateway]
command = java -jar /data/application/gateway/gateway-0.0.1-SNAPSHOT.jar
autostart=false #不立即启动
autorestart=true
startsecs= 1
startretries= 5
stdout_logfile = /var/log/supervisor/gateway.log
stderr_logfile = /var/log/supervisor/gateway.err.log
注意:
概述:配置systemctl,是为了让服务器按顺序启动进程。
(1)进入配置目录
cd /usr/lib/systemd/system
(2)创建supervisord.service,使其开机启动
sudo vim supervisord.service
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisord shutdown
ExecReload=/usr/bin/supervisord reload
killMode=process
[Install]
WantedBy=multi-user.target
(3)创建gateway-start.service,使其在supervisor启动后,再执行脚本启动其他子进程
sudo vim gateway-start.service
[Unit]
Description=gateway-start Service
After=multi-user.target supervisord.service
Requires=supervisord.service
[Service]
Type=forking
ExecStart=/data/application/gateway-start.sh
StandardOutput=syslog
StandardError=inherit
Restart=on-failure
RestartSec=3s
[Install]
WantedBy=multi-user.target
注意:
/data/application/目录下需要创建脚本gateway-start.sh
cd /data/application # 进入目录
sudo touch gateway-start.sh # 创建文件
sudo chmod +x ./gateway-start.sh #授权可执行
#!/bin/bash
echo 'About to configure gateway'
start_status=`curl http://localhost:7101/status/sync` #获取健康检查状态(自己写好接口)
if [[ $start_status == 'synced' ]] #判断通过健康检查
then
echo 'Sidecar status is ok,About to configure gateway'
supervisorctl start gateway #使用supervisor启动另一个项目
echo 'Start up complete!'
exit 0 #返回 0 时,systemctl视为启动成功,便不再重试
else
echo 'Error! sidecar status is '${start_status}'! Stop start gateway'
exit 2 #返回非 0 ,systemctl 将会重新调用该脚本 (因为子进程的启动需要时间,故需要做重试)
fi
此时,需要的配置项都已完成。
(1)配置开机启动命令
概述:配置完成后,需要执行命令使得配置生效
//重新加载配置
sudo systemctl daemon-reload
//配置开机启动
sudo systemctl enable supervisord
sudo systemctl enable zuul-start
(2)扩展
概述:一些常用的命令,用来使用工具
systemctl:
//配置开机启动
sudo systemctl enable supervisord
//直接启动项目(不重启服务器)
sudo systemctl start supervisord
//重启项目
sudo systemctl restart supervisord
//查看服务状态
systemctl status supervisord.service
supervisor:
//直接启动
sudo supervisord
//进入控制界面
sudo supervisorctl
//启动项目
sudo supervisorctl start sidecar
//停止项目
sudo supervisorctl stop sidecar
//停止所有项目
sudo supervisorctl stop all
//查看日志
cat /tmp/supervisord.log
另外,还能通过配置supervisord.conf文件直接进入其控制台
[inet_http_server]
port=192.168.196.216:9001
username=user
password=xbl