有時候,一個項目會有多個微服務,就是多個jar包同時在跑,如果有一天內部網絡服務器機房斷電了,所有機器都關閉了,這個時候如果重啟jar服務很麻煩,如果有100多個jar包,可能需要很多時間去重啟。所以,就有了這個需求。
1、一鍵批量重啟所有jar包
使用方法很簡單,直接執行 sh 文件,后面跟上要執行的參數即可;
\[start|stop|restart|status\],分別代表,啟動|停止|重啟|狀態;
示列:./statusAll.sh stop
下面是正式的腳本,只要替換文件開頭的jar包名稱,目錄,端口和腳本中的變量名稱即可,其它的均不用改動。
#!/bin/bash
PROJECT_NAME=statusAll
AAblitemall=Ablitemall-all-0.1.0-exec.jar
AABjob=ABjob-service-0.1.0-exec.jar
ABpaybc=ABpaybc-service-0.0.1.jar
NOBOOY=NOBOOY-web-0.1.0-exec.jar
MDYC=MDYC-demo-service.jar
UIIS=UIIS-0.0.1-SNAPSHOT.jar
DIR=/data/api
Ablitemall_port=100078
ABjob_port=100099
ABpaybc_port=10000
NOBOOY_port=8009
MDYC_port=8083
UIIS_port=12603
UIIS_port=8004
:<<!
/**
* by:西邊人。公眾號:軟件測試資源站(ID:testpu)
* 202001024
*/
腳本使用方法:
\[start|stop|restart|status\],分別代表,啟動|停止|重啟|狀態
./statusAll.sh stop
!
case "$1" in
start)
## Ablitemall
echo "========== 【 開始啟動 Ablitemall jar包 】 =========="
source /etc/profile
cd $DIR/Ablitemall-all
nohup java -jar $Ablitemall >/dev/null &
Ablitemall_pid=\`ps -ef | grep -w $Ablitemall | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$Ablitemall_pid" \]; then
echo "Ablitemall pid is $Ablitemall_pid"
sleep 3
echo -e "【 Ablitemall-all jar包 啟動成功 】\\n"
else
echo -e "【 Ablitemall-all jar包 啟動失敗 】\\n"
fi
## ABjob
echo "========== 【 開始啟動 ABjob jar包 】 =========="
source /etc/profile
cd $DIR/ABjob-service
nohup java -jar $ABjob >/dev/null &
ABjob_pid=\`ps -ef | grep -w $ABjob | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$ABjob_pid" \]; then
echo "ABjob pid is $ABjob_pid"
sleep 3
echo -e "【 ABjob jar包 啟動成功 】\\n"
else
echo -e "【 ABjob jar包 啟動失敗 】\\n"
fi
## ABpaybc
echo "========== 【 開始啟動 ABpaybc jar包 】 =========="
source /etc/profile
cd $DIR/Ablitemall-ABpaybc
nohup java -jar $ABpaybc >/dev/null &
ABpaybc_pid=\`ps -ef | grep -w $ABpaybc | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$ABpaybc_pid" \]; then
echo "ABpaybc pid is $ABpaybc_pid"
sleep 3
echo -e "【 ABpaybc jar包 啟動成功 】\\n"
else
echo -e "【 ABpaybc jar包 啟動失敗 】\\n"
fi
## NOBOOY
echo "========== 【 開始啟動 NOBOOY jar包 】 =========="
source /etc/profile
cd $DIR/Ablitemall-NOBOOY
nohup java -jar $NOBOOY >/dev/null &
NOBOOY_pid=\`ps -ef | grep -w $NOBOOY | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$NOBOOY_pid" \]; then
echo "NOBOOY pid is $NOBOOY_pid"
sleep 3
echo -e "【 NOBOOY jar包 啟動成功 】\\n"
else
echo -e "【 NOBOOY jar包 啟動失敗 】\\n"
fi
## MDYC
echo "========== 【 開始啟動 MDYC jar包 】 =========="
source /etc/profile
cd $DIR/Ablitemall-MDYC
nohup java -jar $MDYC >/dev/null &
MDYC_pid=\`ps -ef | grep -w $MDYC | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$MDYC_pid" \]; then
echo "MDYC pid is $MDYC_pid"
sleep 3
echo -e "【 MDYC jar包 啟動成功 】\\n"
else
echo -e "【 MDYC jar包 啟動失敗 】\\n"
fi
## UIIS
echo "========== 【 開始啟動 UIIS jar包 】 =========="
source /etc/profile
cd $DIR/Ablitemall-UIIS
nohup java -jar $UIIS >/dev/null &
UIIS_pid=\`ps -ef | grep -w $UIIS | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$UIIS_pid" \]; then
echo "UIIS pid is $UIIS_pid"
sleep 3
echo -e "【 UIIS jar包 啟動成功 】\\n"
else
echo -e "【 UIIS jar包 啟動失敗 】\\n"
fi
echo "========== state函數本次 運行完成 =========="
;;
stop)
## Ablitemall
if ps -ef|grep $Ablitemall |grep -v "grep" &>/dev/null; then
pid=\`ps -ef | grep $Ablitemall | grep -v "grep" | awk '{print $2}'\`
kill -9 ${pid}
echo "【 Ablitemall jar包 停止成功】"
else
echo "========== 【 Ablitemall jar包進程不存在,無需停止 】=========="
fi
## ABjob
if ps -ef|grep $ABjob |grep -v "grep" &>/dev/null; then
pid=\`ps -ef | grep $ABjob | grep -v "grep" | awk '{print $2}'\`
kill -9 ${pid}
echo "【 ABjob jar包 停止成功】"
else
echo "========== 【 ABjob jar包進程不存在,無需停止 】=========="
fi
## ABpaybc
if ps -ef|grep $ABpaybc |grep -v "grep" &>/dev/null; then
pid=\`ps -ef | grep $ABpaybc | grep -v "grep" | awk '{print $2}'\`
kill -9 ${pid}
echo "【 ABpaybc jar包 停止成功】"
else
echo "========== 【 ABpaybc jar包進程不存在,無需停止 】=========="
fi
## NOBOOY
if ps -ef|grep $NOBOOY |grep -v "grep" &>/dev/null; then
pid=\`ps -ef | grep $NOBOOY | grep -v "grep" | awk '{print $2}'\`
kill -9 ${pid}
echo "【 NOBOOY jar包 停止成功】"
else
echo "========== 【 NOBOOY jar包進程不存在,無需停止 】=========="
fi
## MDYC
if ps -ef|grep $MDYC |grep -v "grep" &>/dev/null; then
pid=\`ps -ef | grep $MDYC | grep -v "grep" | awk '{print $2}'\`
kill -9 ${pid}
echo "【 MDYC jar包 停止成功】"
else
echo "========== 【 MDYC jar包進程不存在,無需停止 】=========="
fi
## UIIS
if ps -ef|grep $UIIS |grep -v "grep" &>/dev/null; then
pid=\`ps -ef | grep $UIIS | grep -v "grep" | awk '{print $2}'\`
kill -9 ${pid}
echo "【 UIIS jar包 停止成功】"
else
echo "========== 【 UIIS jar包進程不存在,無需停止 】=========="
fi
;;
restart)
$0 stop
sleep 10
$0 start
echo "【 所有jar包重啟完成】"
;;
status)
## Ablitemall
echo "========== 【 開始檢查 Ablitemall jar包 運行狀態 】 =========="
Ablitemall_pid=\`ps -ef | grep -w $Ablitemall | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$Ablitemall_pid" \]; then
echo -e "【 Ablitemall jar包 運行正常 】\\n"
else
echo -e "【 Ablitemall jar包 運行異常 】\\n"
fi
## ABjob
echo "========== 【 開始檢查 ABjob jar包 運行狀態 】 =========="
ABjob_pid=\`ps -ef | grep -w $ABjob | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$Ablitemall_pid" \]; then
echo -e "【 ABjob jar包 運行正常 】\\n"
else
echo -e "【 ABjob jar包 運行異常 】\\n"
fi
## ABpaybc
echo "========== 【 開始檢查 ABpaybc jar包 運行狀態 】 =========="
ABpaybc_pid=\`ps -ef | grep -w $ABpaybc | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$ABpaybc_pid" \]; then
echo -e "【 ABpaybc jar包 運行正常 】\\n"
else
echo -e "【 ABpaybc jar包 運行異常 】\\n"
fi
## NOBOOY
echo "========== 【 開始檢查 NOBOOY jar包 運行狀態 】 =========="
NOBOOY_pid=\`ps -ef | grep -w $NOBOOY | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$NOBOOY_pid" \]; then
echo -e "【 NOBOOY jar包 運行正常 】\\n"
else
echo -e "【 NOBOOY jar包 運行異常 】\\n"
fi
## MDYC
echo "========== 【 開始檢查 MDYC jar包 運行狀態 】 =========="
MDYC_pid=\`ps -ef | grep -w $MDYC | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$MDYC_pid" \]; then
echo -e "【 MDYC jar包 運行正常 】\\n"
else
echo -e "【 MDYC jar包 運行異常 】\\n"
fi
## UIIS
echo "========== 【 開始檢查 UIIS jar包 運行狀態 】 =========="
UIIS_pid=\`ps -ef | grep -w $UIIS | grep -v "grep" | awk '{print $2}'\`
if \[ -n "$UIIS_pid" \]; then
echo -e "【 UIIS jar包 運行正常 】\\n"
else
echo -e "【 UIIS jar包 運行異常 】\\n"
fi
echo "========== state函數本次 運行完成 =========="
;;
esac
exit 0
2、單個jar包一鍵重啟、停止、查看狀態等 shell 腳本
這個寫法比較簡潔,跟上面的差不多類似,只是單個jar的重啟和停止等。
下面是正式的 shell 腳本
#!/bin/sh
# shell樣例及解釋,使用時請去掉注釋,防止亂碼
command='java -Xms256m -Xmx1024m -jar ./smart-monitor-api-0.0.1-SNAPSHOT.jar'
log_dir="/home/dev/deploy/zhihui/smart/logs/monitor"
log\_file="log\_dir/smart-monitor.log"
# -p:如果目錄已經存在,則不會有錯誤提示。若父目錄不存在,將會創建父目錄。該選項常用於創建級聯目錄
mkdir -p $log_dir
start(){
if \[ "$log_file" != "" \]; then
exec $command >> "$log_file" 2>&1 &
else
exec $command &
fi
}
stop(){
#{print $2}:在ps到這個進程后獲取進程pid,即下行的22704
#smart 22704 22616 1 11:27 pts/20 00:05:47 java -jar smart-monitor-api-0.0.1-SNAPSHOT.jar
#grep -v "grep" :排除掉grep本身搜索進程pid,否則搜索的程序只有一個,但是搜索結果卻有兩個pid
ps -ef | grep "$command" |grep -v "grep"| awk '{print $2}' | while read pid
do
#ps --no-heading $pid | wc -l:通過進程號PID來查找進程是否存在,輸出為0表示不存在,輸出=1,表示存在,因為進程號不可能重復,所以輸出肯定非0即1
C_PID=$(ps --no-heading $pid | wc -l)
echo "CURRENT PID=$pid"
if \[ "$C_PID" == "1" \]; then
echo "PID=$pid Ready to end"
kill -9 $pid
echo "PID=$pid end"
else
echo "PID=$pid does not exist"
fi
done
}
# ./run.sh start:根據腳本命令參數,確定執行的命令
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
printf 'Usage: %s {start|stop|restart}\\n' "$prog"
exit 1
;;
esac
讀后感
來這里找我交流
-
QQ群:330374464
-
公眾號:軟件測試資源站(ID:testpu)