jar_shell.sh文件內容如下
#! /bin/sh # 端口號 PORTS=(8761 10000) # 模塊 MODULES=(zns-eureka zns-product) # 模塊名稱 MODULE_NAMES=(注冊中心 產品模塊) # jar包數組 JARS=(zns-eureka-1.0.0.jar zns-product-1.0.0.jar) # jar包路徑 JAR_PATH='/usr/local/app/jars' # 日志路徑 LOG_PATH='/usr/local/app/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 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 -Xms256m -Xmx512m -jar $JAR_PATH/$JAR_NAME >> $LOG_PATH/$MODULE.log 2>&1 & PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` 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=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` done okCount=$(($okCount+1)) echo "$MODULE---$MODULE_NAME:已經啟動成功,PID=$PID" fi fi done if(($commandOk == 0));then echo "第二個參數輸入錯誤" 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 "第二個參數輸入錯誤" 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
啟動所有jar包:sh jar_shell.sh start all 或者./sh start all
停止所有jar包:sh jar_shell.sh stop all 或者./sh stop all
重啟所有jar包:sh jar_shell.sh restart all 或者./sh restart all
啟動,停止或重啟單個jar包,只需要將all替換為相應的模塊就行
比如 sh jar_shell.sh start zns-eureka