linux一次启动多个jar包并且可以自定义路径和端口号
分享公司大神使用的一个脚步,可以一次启动多个jar包,也可以指定启动jar包
代码
#! /bin/sh
# 端口号
PORTS=(8080 8081 8082 8083)
# 模块
MODULES=(gateway auth system file)
# 模块名称
MODULE_NAMES=(网关服务 认证服务 服务 文件服务)
VERSION=(1.6.4 1.3.5 1.3.7 1.3.9)
# jar包数组
# JARS=(test-big-data-service-1.0.1-SNAPSHOT.jar test-content-service-1.0.1-SNAPSHOT.jar)
# jar包路径
JAR_PATH='/opt/usr'
# java 环境变量
JVM_OPTS="-Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8"
JVM_OPTS="${JVM_OPTS} -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC -XX:+UseParallelOldGC"
# 启动加载配置文件
PROFILES_ACTIVE=dev
start(){
local MODULE;
local MODULE_NAME;
local JAR_NAME;
local command="$1";
local commandOk=0;
local count=0;
local okCount=0;
local port=0;
for((i=0;i<${#MODULES[@]};i++));
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=${MODULES[$i]}-${VERSION[$i]}.jar
echo ${JAR_NAME}
PORT=${PORTS[$i]}
if [ "$command" == "all" ] || [ "$command" == "$MODULE" ];then
commandOk=1
count=1
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
echo "$MODULE----$MODULE_NAME:已经运行,PID=$PID"
else
echo "java ${JVM_OPTS} -jar $JAR_PATH/$JAR_NAME --spring.profiles.active=$PROFILES_ACTIVE > $JAR_PATH/logs/$MODULE.log 2>&1 &"
exec java ${JVM_OPTS} -jar $JAR_PATH/$JAR_NAME --spring.profiles.active=$PROFILES_ACTIVE > $JAR_PATH/logs/$MODULE.log 2>&1 &
echo "$MODULE_NAME启动中..."
sleep 10s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
while [ -z "$PID" ]
do
if (($count == 3));then
echo "$MODULE---$MODULE_NAME:$(expr $count \* 10)秒内未启动,请检查!"
break
fi
count=$(($count+1))
echo "$MODULE_NAME启动中.................."
sleep 10s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
if [ -n "$PID" ];then
okCount=$(($okCount+1))
echo "$MODULE---$MODULE_NAME:已经启动成功,PID=$PID"
else
echo "$MODULE---$MODULE_NAME:启动失败,请检查"
fi
fi
fi
done
if(($commandOk == 0));then
echo "第二个参数请输入以下的某个值:"
echo "--> all"
for((i=0;i<${#MODULES[@]};i++));
do
echo "--> "${MODULES[$i]}
done
else
echo "............启动成功!本次共启动:$okCount个服务..........."
fi
}
stop(){
local MODULE;
local MODULE_NAME;
local JAR_NAME;
local command="$1";
local commandOk=0;
local okCount=0;
for((i=0;i<${#MODULES[@]};i++));
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=${MODULES[$i]}-${VERSION[$i]}.jar
if [ "$command" = "all" ] || [ "$command" = "$MODULE" ];then
commandOk=1
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
echo "$MODULE---$MODULE_NAME:准备结束,PID=$PID"
kill -9 $PID
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
while [ -n "$PID" ]
do
sleep 3s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
echo "$MODULE---$MODULE_NAME:成功结束"
okCount=$(($okCount+1))
else
echo "$MODULE---$MODULE_NAME:未运行"
fi
fi
done
if (($commandOk == 0));then
echo "第二个参数请输入以下的某个值:"
echo "--> all"
for((i=0;i<${#MODULES[@]};i++));
do
echo "--> "${MODULES[$i]}
done
else
echo "............停止成功!本次共停止:$okCount个服务............"
fi
}
case "$1" in
start)
start "$2"
;;
stop)
stop "$2"
;;
restart)
stop "$2"
sleep 3s
start "$2"
;;
*)
echo "第一个参数请输入:start|stop|restart"
exit 1
;;
esac
exit 0
使用
1.编辑脚步,复制代码到文本,改名为start_jar.sh
2.启动命令
start_jar.sh start all
第三个all的参数也可以是单独一个jar包名
3.停止命令
start_jar.sh stop all
第三个all的参数也可以是单独一个jar包名