1. 程式人生 > 實用技巧 >微服務架構,多後臺應用,一鍵啟動

微服務架構,多後臺應用,一鍵啟動

微服務架構下多個後臺服務,設定一鍵啟動指令碼。

  思想:每個後臺服務都有一個對應的 'start.sh' 啟動檔案,用來對單個服務進行啟動控制,而後增加一個總控指令碼檔案 'power_on.sh' ,用來對每個服務的啟動指令碼進行管理控制,從而達到,對多個服務進行一鍵啟動設定,或開機自啟動設定等

cat > power_on.sh << EOF

#!/bin/bash #後端專案部署總目錄 HOME=/HOME/to/path
#下面有一個單獨的服務啟動指令碼,對應後端每一個微服務的啟動 Start
=./start.sh usage() { echo "Usage: sh demo.sh [start|stop|restart|status]
" exit 1 } Get_Service_Dir() { cd ${HOME} Service_Dir=`ls | grep -Ev 'logs'` } Public_method() { Get_Service_Dir for Dir in ${Service_Dir} do cd ${Dir} ${Start} $1 cd .. done } Start_Service() { Public_method start } Stop_Service() { Public_method stop } Status_Service() { Public_method status } Restart_Service() { Stop_Service Start_Service }
case "$1" in "start") Start_Service ;; "stop") Stop_Service ;; "status") Status_Service ;; "restart") Restart_Service ;; *) usage ;; esac

EOF

單個服務啟動指令碼展示

cat > start.sh << EOF

#!/bin/bash APP_NAME=APP_NAME.jar JAVA=/JDK/to/path/bin/java MEMORY
='-Xms2048m -Xmx2048m' SERVER='-server' PORT='--spring.profiles.active=dev' LOG='/LOG/to/path/APP.log' #使用說明,用來提示輸入引數 usage() { echo "Usage: sh demo.sh [start|stop|restart|status]" exit 1 } #檢查程式是否在執行 is_exist() { pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}' ` if [ -z "${pid}" ]; then return 1 else return 0 fi } start() { is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is already running. pid=${pid} ." else $JAVA $MEMORY $SERVER -jar $APP_NAME $PORT > $LOG 2>&1 & fi } stop() { is_exist if [ $? -eq "0" ]; then kill -9 $pid else echo "${APP_NAME} is not running" fi } status() { is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is running. Pid is ${pid}" else echo "${APP_NAME} is not running." fi }
restart() { stop start } #根據輸入引數,選擇執行對應方法,不輸入則執行使用說明
case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac

EOF

可用於伺服器或裝置發生宕機等故障重啟後對於後臺微服務的快速恢復。

指令碼較簡陋,暫未考慮如何處理服務間呼叫,以及啟動順序等問題,但勉強可正常使用

此為再未使用容器化部署時可方便對服務整體管理