1. 前言
这里,supervisor已经安装完成,离线安装参考,在线安装参考。
需求:守护java进程,由于java应用传参启动,因此使用脚本进行封装传参启动。
2. 配置
配置文件:*.ini
[program:web]
#运行程序的命令
command=/opt/datanet/datanet-supervisor.sh 2
#服务运行依赖环境变量,多个环境变量用逗号隔开
environment=ICV_ROOT="/home/icv_root",JAVA_HOME="/opt/jdk/jdk1.8.0_211"
#命令执行的目录
directory=/opt/datanet
#stdout日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/datanet/datanet-web.out
#stdout 日志文件备份数,默认是10
stdout_logfile_backups = 20
#stdout 日志文件大小,默认50MB
stdout_logfile_maxbytes=50MB
#是否自动启动,随着supervisord的启动而启动
autostart=true
#程序意外退出是否自动重启
autorestart=true
#启动失败自动重试次数,默认是3
startretries=3
#自动重启间隔
startsecs=5
#进程启动优先级,默认999,值小的优先启动
priority=3
#默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
stopasgroup=true
#默认为false,向进程组发送kill信号,包括子进程
killasgroup=true
#进程执行的用户身份
user=root
注意:服务运行依赖环境变量,多个环境变量用逗号隔开。
java启动脚本:monitor.sh
#!/bin/bash
echo "****************************"
echo "*** 启动应用软件开始 ****"
echo "****************************"
# 进入目录
cd "/opt/datanet"
# 引入脚本start.sh
currentpath=$(pwd)
. $currentpath/func
#传参序号
index=''
if [ ! -n "$1" ]
then
echo "参数为空"
exit 1
else
echo "第1个参数为:$1";
index=$1
fi
# 安装对应服务
case $index in
1)
echo "*启动datanet-sip3"
exec java -Xms512m -Xmx2048m -jar -Dservice_gateway.hostname=${local_server_ip} -Dspring.redis.host=${redis_ip} -Dspring.cloud.consul.host=${consul_ip} /opt/datanet/system-application-services.jar
;;
2)
echo "*启动datanet-web"
java -Xms512m -Xmx2048m -jar /opt/datanet/datanet-web-0.0.1.jar --spring.cloud.consul.discovery.ip-address=${consul_ip} --server.port=2000 --sip3_ip=${consul_ip} --sip3_port=10002 --spring.datasource.url=jdbc:postgresql://${postgresql_ip}:5432/dnps --spring.datasource.username=dnps --spring.datasource.password=dnps --spring.cloud.consul.host=${consul_ip} --spring.cloud.consul.port=8500 --es.cluster.clusterUrls=http://${es_ip}:9200/ --es.cluster.connect.pool.validate.url=http://${es_ip}:9200/_cat/health?v --spring.elasticsearch.jest.uris=http://${es_ip}:9200/
;;
3)
echo "*启动datanet-gateway"
# 使用了exec之后,当前的shell的pid就没有了,被exec的命令所替代
exec java -Xms128m -jar /opt/datanet/datanet-gateway-0.0.1.jar --spring.cloud.consul.discovery.ip-address=${consul_ip} --server.port=8080 --sip3_ip=${consul_ip} --sip3_port=10002 --spring.cloud.consul.host=${consul_ip} --spring.cloud.consul.port=8500
;;
*)
echo "*传参无效,无法启动"
esac
echo "****************************"
echo "*** 启动应用软件完成 ****"
echo "****************************"
注意:使用了exec之后,当前的shell的pid就没有了,被exec的命令所替代,这样supervisor页面显示应用的PID。
# supervisorctl update
3. Supervisor守护es
[program:es]
#运行程序的命令
command=su - es -l -c "/opt/elk/elasticsearch-6.7.0/bin/elasticsearch"
#服务运行依赖环境变量,多个环境变量用逗号隔开
environment=JAVA_HOME="/opt/jdk/jdk1.8.0_211"
#命令执行的目录
directory=/opt/elk/elasticsearch-6.7.0
#stdout日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/elk/elasticsearch-6.7.0/es.out
#stdout 日志文件备份数,默认是10
stdout_logfile_backups = 20
#stdout 日志文件大小,默认50MB
stdout_logfile_maxbytes=50MB
#是否自动启动,随着supervisord的启动而启动
autostart=true
#程序意外退出是否自动重启
autorestart=true
#启动失败自动重试次数,默认是3
startretries=3
#自动重启间隔
startsecs=5
#进程启动优先级,默认999,值小的优先启动
priority=1
#默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
stopasgroup=true
#用来杀死进程的信号
stopsignal=KILL
#发送SIGKILL前的等待时间
stopwaitsecs=10
#默认为false,向进程组发送kill信号,包括子进程
killasgroup=true
#进程执行的用户身份
user=root
补充:
如果要守护nginx,需要关闭nginx后台启动,可加参数-g 'daemon off;' 方便supervisor进行守护管理。
例如启动命令:
command=/opt/datanet/nginx/sbin/nginx -p /opt/datanet/nginx/ -g 'daemon off;' -c /opt/datanet/nginx/conf/nginx.conf