linux--shell指令碼批量啟動和停止jar包
阿新 • • 發佈:2019-02-17
指令碼程式碼all.sh
#! /bin/sh # 埠號 PORTS=(8084 8083 8085 8086) # 系統模組 MODULES=(mcht system user act) # 系統模組名稱 MODULE_NAMES=(商戶模組 系統模組 使用者模組 活動模組) # jar包陣列 JARS=(mcht-1.0.1-SNAPSHOT.jar system-1.0.1-SNAPSHOT.jar user-1.0.1-SNAPSHOT.jar act-1.0.1-SNAPSHOT.jar) # jar包路徑 JAR_PATH='/usr/local/beta' # 日誌路徑 LOG_PATH='/usr/local/beta' 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=${JARS[$i]} PORT=${PORTS[$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 echo "$MODULE---$MODULE_NAME:已經執行,PID=$PID" else exec nohup java -jar $JAR_PATH/$JAR_NAME >> $LOG_PATH/nohup.out & PID=`netstat -apn | grep $PORT | awk '{print $7}' | cut -d/ -f 1` while [ -z "$PID" ] do if (($count == 30));then echo "$MODULE---$MODULE_NAME:$(expr $count \* 10)秒內未啟動,請檢查!" break fi count=$(($count+1)) echo "$MODULE_NAME啟動中.................." sleep 10s PID=`netstat -apn | grep $PORT | awk '{print $7}' | cut -d/ -f 1` done okCount=$(($okCount+1)) echo "$MODULE---$MODULE_NAME:已經啟動成功,PID=$PID" fi fi done if(($commandOk == 0));then echo "第二個引數請輸入:mcht|system|user|act" 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=${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 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 "第二個引數請輸入:mcht|system|user|act" 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
1,啟動所有jar包:sh all.sh start all 或者./sh start all
2,停止所有jar包:sh all.sh stop all 或者./sh stop all
3,重啟所有jar包:sh all.sh restart all 或者./sh restart all
4,重啟或者停止單個jar包,只需要將all替換為相應的模組程式碼就行