一键启动project所有模块,直接上脚本
#!/bin/bash
#####################################################Environment Setting#######################################################
#程序代码数组
APPS=(job gateway admin front)
#程序名称数组
NAMES=(任务模块 网关模块 后台管理 前台页面)
#jar包数组
JARS=(xxl-job-admin-2.0.jar server-gateway-2.0.jar server-admin-2.0.jar server-front-2.0.jar)
#jar包路径数组
PATHS=(/opt/jeecms_x2/server_shell/xxl-job/ /opt/jeecms_x2/server_shell/server-gateway/ /opt/jeecms_x2/server_shell/server-admin/ /opt/jeecms_x2/server_shell/server-front/)
#port暴露的tcp端口
ports=(18080 8191 18001 18002)
start(){
local APPNAME=
local NAME=
local CLASSNAME=
local PROJECTDIR=
local command="sh start.sh"
local cmd2="$1"
local cmd2ok=0
local cnt=0
local okcnt=0
#local C_PID="0"
#for i in `seq 0 22`
echo "---------------------------开始启动服务..."
for(( i=0;i<${#APPS[@]};i++))
do
APPNAME=${APPS[$i]}
NAME=${NAMES[$i]}
CLASSNAME=${JARS[$i]}
PROJECTDIR=${PATHS[$i]}
if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then
cmd2ok=1
C_PID="0"
cnt=0
PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]
then
echo "$APPNAME---$NAME:己经运行,PID=$PID"
#okcnt=$(($okcnt+1))
else
cd $PROJECTDIR
rm -f $PROJECTDIR/nohup.out
command="nohup sh $PROJECTDIRstartsh"
exec $command >> $PROJECTDIR/logs/nohup.out &
PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
cnt=0
#while (("$C_PID" == "0"))
while [ -z "$PID" ]
do
if (($cnt==30))
then
echo "$APPNAME---$NAME:$cnt秒内未启动,请检查!"
break
fi
cnt=$(($cnt+1))
sleep 1s
#ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read pid
#do
# C_PID=$(ps --no-heading $pid | wc -l)
#done
PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
okcnt=$(($okcnt+1))
echo "$APPNAME---$NAME:己经成功启动,PID=$PID"
#前台模块启动较慢
if [ "$APPNAME" == "deal" ] ;
then
echo "$APPNAME---$NAME:启动中..."
sleep 30s
fi
if [ "$APPNAME" == "dispatch" ] ;
then
echo "$APPNAME---$NAME:启动中..."
sleep 10s
fi
fi
#done
fi
done
if (($cmd2ok==0))
then
echo "command2: all|job|gateway|admin|front"
else
echo "---------------------------本次启动:$okcnt个服务"
fi
}
stop(){
local APPNAME=
local CLASSNAME=
local PROJECTDIR=
local command="sh shutdown.sh"
local cmd2="$1"
local cmd2ok=0
local okcnt=0
echo "---------------------------开始停止服务..."
for(( i=0;i<${#APPS[@]};i++))
do
APPNAME=${APPS[$i]}
NAME=${NAMES[$i]}
CLASSNAME=${JARS[$i]}
PROJECTDIR=${PATHS[$i]}
if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then
cmd2ok=1
PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]
then
echo "$NAME:PID=$PID准备结束"
kill $PID
PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
while [ -n "$PID" ]
do
sleep 1s
#C_PID=$(ps --no-heading $PID | wc -l)
PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
echo "$NAME:成功结束"
okcnt=$(($okcnt+1))
else
echo "$NAME:未运行"
fi
#done
fi
done
if (($cmd2ok==0))
then
echo "command2: all|job|gateway|admin|front"
else
echo "---------------------------本次共停止:$okcnt个服务"
fi
}
status(){
local APPNAME=
local NAME=
local CLASSNAME=
local PROJECTDIR=
local port=
local command="sh start.sh status"
local cmd2="$1"
local cmd2ok=0
local cnt=0
local okcnt=0
echo "---------------------------开始查询服务..."
for(( i=0;i<${#APPS[@]};i++))
do
APPNAME=${APPS[$i]}
NAME=${NAMES[$i]}
CLASSNAME=${JARS[$i]}
PROJECTDIR=${PATHS[$i]}
port=${ports[$i]}
if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then
cmd2ok=1
C_PID="0"
cnt=0
PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]
then
echo "$APPNAME---$NAME:己经运行,PID=$PID"
lsof -i :$port
else
echo "$APPNAME---$NAME:未运行,PID=null"
fi
okcnt=$(($okcnt+1))
fi
done
if (($cmd2ok==0))
then
echo "command2: all|job|gateway|admin|front"
else
echo "---------------------------本次共查:$okcnt个服务"
fi
}
case "$1" in
start)
start "$2"
exit 1
;;
stop)
stop "$2"
;;
restart)
stop "$2"
start "$2"
;;
status)
status "$2"
;;
*)
echo "command1: start|stop|restart|status"
exit 1
;;
esac
效果预览
[web@ecs-e31a-1110168 ~]$ sh oneKeyServiceStart.sh stop all
---------------------------开始停止服务...
任务模块:PID=5831准备结束
任务模块:成功结束
网关模块:PID=5899准备结束
网关模块:成功结束
后台管理:PID=5990准备结束
后台管理:成功结束
前台页面:PID=6080准备结束
前台页面:成功结束
---------------------------本次共停止:4个服务
[web@ecs-e31a-1110168 ~]$ sh oneKeyServiceStart.sh start all
---------------------------开始启动服务...
nohup: redirecting stderr to stdout
job---任务模块:己经成功启动,PID=9262
nohup: redirecting stderr to stdout
gateway---网关模块:己经成功启动,PID=9343
nohup: redirecting stderr to stdout
admin---后台管理:己经成功启动,PID=9424
nohup: redirecting stderr to stdout
front---前台页面:己经成功启动,PID=9512
---------------------------本次启动:4个服务
[web@ecs-e31a-1110168 ~]$ sh oneKeyServiceStart.sh status all
---------------------------开始查询服务...
job---任务模块:己经运行,PID=9262
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9262 web 28u IPv6 72965 0t0 TCP *:18080 (LISTEN)
java 9262 web 34u IPv6 72966 0t0 TCP localhost:18080->localhost:35502 (ESTABLISHED)
java 9424 web 289u IPv6 80324 0t0 TCP localhost:35502->localhost:18080 (ESTABLISHED)
gateway---网关模块:己经运行,PID=9343
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9343 web 188u IPv6 74003 0t0 TCP *:8191 (LISTEN)
admin---后台管理:己经运行,PID=9424
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9424 web 290u IPv6 78075 0t0 TCP *:18001 (LISTEN)
front---前台页面:己经运行,PID=9512
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9512 web 236u IPv6 78038 0t0 TCP *:18002 (LISTEN)
---------------------------本次共查:4个服务
网友评论