项目要求:
有多个jar要启动,启动参数也各不相同,根据配置文件来启动或不启动指定的jar包。
根据 https://blog.csdn.net/zk0920zk/article/details/79253950 里的脚本,
改良如下:
#! /bin/sh
# 系统模块
MODULES=(amap baidu superMap alarm gps lock tcpgw)
# 系统模块名称
MODULE_NAMES=(高德地图后台 百度地图后台 超图地图后台 告警 GPS数据存储 锁状态处理 网关)
# jar包数组
JARS=(admin-1.2-amap.jar admin-1.2-baidu.jar admin-1.2-superMap.jar alarm-1.2-SNAPSHOT.jar gps-1.2-SNAPSHOT.jar lock-monitor-1.2-SNAPSHOT.jar tcpgw-1.0.1.jar)
# 运行目录
PWD=$(cd $(dirname $0); pwd)
# jar包路径
JAR_PATH="$PWD/jar"
# 日志路径
LOG_PATH="$PWD/logs"
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
skip=0
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=${JARS[$i]}
if [ "$command" == "all" ] || [ "$command" == "$MODULE" ];then
commandOk=1
count=0
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
printf "%12s\t%-24s\t已经运行\tPID=%d\n" $MODULE $MODULE_NAME $PID
else
case $MODULE in
gps)
exec nohup java -Djava.library.path=/usr/local/taos/driver/ -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
;;
tcpgw)
fileD=${PWD}/jar/config/application.yml
start_line=`grep "rabbitmq" $fileD -n| awk -F: '{print $1}'`
end_line=`grep "redis" $fileD -n| awk -F: '{print $1}'`
line=$[$end_line-$start_line]
TMP=`head -n $end_line $fileD | tail -n $line`
TMPa=`echo ${TMP#*host: }`
RMHost=`echo ${TMPa% username*}`
TMPa=`echo ${TMP#*username: }`
RMuser=`echo ${TMPa% password*}`
TMPa=`echo ${TMP#*password: }`
RMpasswd=`echo ${TMPa% redis*}`
exec nohup java -Dport=8602 -Damqp=amqp://${RMuser}:${RMpasswd}@${RMHost}:5672/ -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
;;
*)
if [ "${MODULE}" == "amap" ]||[ "${MODULE}" == "baidu" ]||[ "${MODULE}" == "superMap" ];then
fileD=`cat ./jar/config/application.yml | grep type:`
TMP=`echo ${fileD// /}`
TMPa=`echo ${TMP#type:}`
skip=1
if [ "${MODULE}" == "baidu" ]&&[ "$TMPa" == "0" ];then
exec nohup java -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
skip=0
elif [ ${MODULE} == "superMap" ]&&[ "$TMPa" == "2" ];then
exec nohup java -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
skip=0
elif [ "${MODULE}" == "amap" ]&&[ "$TMPa" == "1" ];then
exec nohup java -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
skip=0
fi
else
exec nohup java -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
fi
esac
if ((skip == 0));then
sleep 3s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
while [ -z "$PID" ]
do
if (($count == 20));then
printf "%12s\t%24s\t%d秒内未启动,请检查!\n" $MODULE $MODULE_NAME $(expr $count \* 5)
break
fi
count=$(($count+1))
echo "$MODULE_NAME启动中.................."
echo "$PID..$JAR_NAME"
sleep 5s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
okCount=$(($okCount+1))
printf "%12s\t%-24s\t启动成功\tPID=%d\n" $MODULE $MODULE_NAME $PID
fi
fi
fi
done
if(($commandOk == 0));then
echo "第二个参数请输入:all|amap|baidu|superMap|alarm|gps|lock|tcpgw"
else
echo "............本次共启动:$okCount个服务..........."
fi
}
status() {
local MODULE=
local MODULE_NAME=
local JAR_NAME=
for((i=0;i<${#MODULES[@]};i++))
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=${JARS[$i]}
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
printf "%12s\t%-24s\t运行中...\tPID=%d\n" $MODULE $MODULE_NAME $PID
else
printf "%12s\t%-24s\t未运行\t\n" $MODULE $MODULE_NAME
fi
done
}
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=${JARS[$i]}
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
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
printf "%12s\t%-24s\t结束成功!\t\n" $MODULE $MODULE_NAME $PID
okCount=$(($okCount+1))
else
printf "%12s\t%-24s\t未运行\t\n" $MODULE $MODULE_NAME
fi
fi
done
if (($commandOk == 0));then
echo "第二个参数请输入:all|amap|baidu|superMap|alarm|gps|lock|tcpgw"
else
echo "............本次共停止:$okCount个服务............"
fi
}
case "$1" in
start)
start "$2"
;;
stop)
stop "$2"
;;
restart)
stop "$2"
sleep 3s
start "$2"
;;
status)
status
;;
*)
echo "第一个参数请输入:start|stop|status|restart"
exit 1
;;
esac
运行效果:
[root@9c0ecc4f0116 hg]# ./runjar.sh stop all
amap 高德地图后台 结束成功!
baidu 百度地图后台 未运行
superMap 超图地图后台 未运行
alarm 告警 结束成功!
gps GPS数据存储 结束成功!
lock 锁状态处理 结束成功!
tcpgw 网关 结束成功!
............本次共停止:5个服务............
[root@9c0ecc4f0116 hg]# ./runjar.sh start all
amap 高德地图后台 启动成功 PID=37349
alarm 告警 启动成功 PID=37447
gps GPS数据存储 启动成功 PID=37523
lock 锁状态处理 启动成功 PID=37667
tcpgw 网关 启动成功 PID=37786
............本次共启动:5个服务...........
[root@9c0ecc4f0116 hg]# ./runjar.sh status
amap 高德地图后台 运行中... PID=37349
baidu 百度地图后台 未运行
superMap 超图地图后台 未运行
alarm 告警 运行中... PID=37447
gps GPS数据存储 运行中... PID=37523
lock 锁状态处理 运行中... PID=37667
tcpgw 网关 运行中... PID=37786
[root@9c0ecc4f0116 hg]# ./runjar.sh stop alarm
alarm 告警 结束成功!
............本次共停止:1个服务............
[root@9c0ecc4f0116 hg]# ./runjar.sh status
amap 高德地图后台 运行中... PID=37349
baidu 百度地图后台 未运行
superMap 超图地图后台 未运行
alarm 告警 未运行
gps GPS数据存储 运行中... PID=37523
lock 锁状态处理 运行中... PID=37667
tcpgw 网关 运行中... PID=37786
[root@9c0ecc4f0116 hg]# ./runjar.sh start alarm
alarm 告警 启动成功 PID=38480
............本次共启动:1个服务...........
[root@9c0ecc4f0116 hg]# ./runjar.sh status
amap 高德地图后台 运行中... PID=37349
baidu 百度地图后台 未运行
superMap 超图地图后台 未运行
alarm 告警 运行中... PID=38480
gps GPS数据存储 运行中... PID=37523
lock 锁状态处理 运行中... PID=37667
tcpgw 网关 运行中... PID=37786
来源:CSDN
作者:cs524100
链接:https://blog.csdn.net/cs524100/article/details/103669754