Supervisor守护java进程

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 

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页