Linux shell腳本,按順序批量啟動多個jar包,批量啟動spring cloud的jar包


Linux shell腳本,按順序批量啟動多個jar包,批量啟動spring cloud的jar包

一. 手動一個一個啟動的方式:

nohup java -jar eurekaserver.jar > ../logs/eurekaserver.log 2>&1 &
nohup java -jar configserver.jar > ../logs/configserver.log 2>&1 &
nohup java -jar zuulgatewayserver.jar > ../logs/zuulgatewayserver.log 2>&1 &
nohup java -jar authorizeserver.jar > ../logs/authorizeserver.log 2>&1 &
nohup java -jar logstatisticsserver.jar > ../logs/logstatisticsserver.log 2>&1 &
nohup java -jar appmgrserver.jar > ../logs/appmgrserver.log 2>&1 &
nohup java -jar organizeuserserver.jar > ../logs/organizeuserserver.log 2>&1 &
nohup java -jar jtmopserver.jar > ../logs/jtmopserver.log 2>&1 &

 

二. shell腳本代碼:

#!/bin/sh
export EUREKA=eurekaserver.jar
export CONFIG=configserver.jar
export GATEWAY=zuulgatewayserver.jar
export AUTH=authorizeserver.jar
export LOG=logstatisticsserver.jar
export APPMGR=appmgrserver.jar
export ORGANIZEUSER=organizeuserserver.jar
export JTMOP=jtmopserver.jar

export EUREKA_log=../logs/eurekaserver.log
export CONFIG_log=../logs/configserver.log
export GATEWAY_log=../logs/zuulgatewayserver.log
export AUTH_log=../logs/authorizeserver.log
export LOG_log=../logs/logstatisticsserver.log
export APPMGR_log=../logs/appmgrserver.log
export ORGANIZEUSER_log=../logs/organizeuserserver.log
export JTMOP_log=../logs/jtmopserver.log

export EUREKA_port=10080
export CONFIG_port=10085
export GATEWAY_port=10084
export AUTH_port=10088
export LOG_port=10093
export APPMGR_port=10092
export ORGANIZEUSER_port=10087
export JTMOP_port=10091

case "$1" in

start)
        ## 啟動eureka
        echo "--------eureka 開始啟動--------------"
        nohup java -jar $EUREKA > $EUREKA_log 2>&1 &
        EUREKA_pid=`lsof -i:$EUREKA_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$EUREKA_pid" ]
            do
              EUREKA_pid=`lsof -i:$EUREKA_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "EUREKA pid is $EUREKA_pid"
        sleep 10
        echo "--------eureka 啟動成功--------------"
 
        ## 啟動config
        echo "--------開始啟動CONFIG---------------"
        nohup java -jar $CONFIG > $CONFIG_log 2>&1 &
        CONFIG_pid=`lsof -i:$CONFIG_port|grep "LISTEN"|awk '{print $2}'` 
        until [ -n "$CONFIG_pid" ]
            do
              CONFIG_pid=`lsof -i:$CONFIG_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "CONFIG pid is $CONFIG_pid"
        sleep 30
        echo "---------CONFIG 啟動成功-----------"
 
        ## 啟動gateway
        echo "--------開始啟動GATEWAY---------------"
        nohup java -jar $GATEWAY > $GATEWAY_log 2>&1 &
        GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$GATEWAY_pid" ]
            do
              GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "GATEWAY pid is $GATEWAY_pid"    
        echo "---------GATEWAY 啟動成功-----------"
 
        ## 啟動auth
        echo "--------開始啟動AUTH---------------"
        nohup java -jar $AUTH > $AUTH_log 2>&1 &
        AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$AUTH_pid" ]
            do
              AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "AUTH pid is $AUTH_pid"     
        echo "---------AUTH 啟動成功-----------"
                 
        ## 啟動log
        echo "--------開始啟動LOG---------------"
        nohup java -jar $LOG > $LOG_log 2>&1 &
        LOG_pid=`lsof -i:$LOG_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$LOG_pid" ]
            do
              LOG_pid=`lsof -i:$LOG_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "LOG pid is $LOG_pid"     
        echo "---------LOG 啟動成功-----------"
        
        ## 啟動appmgr
        echo "--------開始啟動APPMGR---------------"
        nohup java -jar $APPMGR > $APPMGR_log 2>&1 &
        APPMGR_pid=`lsof -i:$APPMGR_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$APPMGR_pid" ]
            do
              APPMGR_pid=`lsof -i:$APPMGR_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "APPMGR pid is $APPMGR_pid"     
        echo "---------APPMGR 啟動成功-----------"
        
        ## 啟動organizeuser
        echo "--------開始啟動ORGANIZEUSER---------------"
        nohup java -jar $ORGANIZEUSER > $ORGANIZEUSER_log 2>&1 &
        ORGANIZEUSER_pid=`lsof -i:$ORGANIZEUSER_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$ORGANIZEUSER_pid" ]
            do
              ORGANIZEUSER_pid=`lsof -i:$ORGANIZEUSER_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "ORGANIZEUSER pid is $ORGANIZEUSER_pid"     
        echo "---------ORGANIZEUSER 啟動成功-----------"
        
        ## 啟動jtmop
        echo "--------開始啟動JTMOP---------------"
        nohup java -jar $JTMOP > $JTMOP_log 2>&1 &
        JTMOP_pid=`lsof -i:$JTMOP_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$JTMOP_pid" ]
            do
              JTMOP_pid=`lsof -i:$JTMOP_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "JTMOP pid is $JTMOP_pid"     
        echo "---------JTMOP 啟動成功-----------"
        
        echo "===startAll success==="
        ;;

 stop)
        P_ID=`ps -ef | grep -w $EUREKA | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===EUREKA process not exists or stop success"
        else
            kill -9 $P_ID
            echo "EUREKA killed success"
        fi
        
        P_ID=`ps -ef | grep -w $CONFIG | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===CONFIG process not exists or stop success"
        else
            kill -9 $P_ID
            echo "CONFIG killed success"
        fi
        
         P_ID=`ps -ef | grep -w $GATEWAY | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===GATEWAY process not exists or stop success"
        else
            kill -9 $P_ID
            echo "GATEWAY killed success"
        fi
        
         P_ID=`ps -ef | grep -w $AUTH | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===AUTH process not exists or stop success"
        else
            kill -9 $P_ID
            echo "AUTH killed success"
        fi
        
         P_ID=`ps -ef | grep -w $LOG | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===LOG process not exists or stop success"
        else
            kill -9 $P_ID
            echo "LOG killed success"
        fi
        
         P_ID=`ps -ef | grep -w $APPMGR | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===APPMGR process not exists or stop success"
        else
            kill -9 $P_ID
            echo "APPMGR killed success"
        fi
        
         P_ID=`ps -ef | grep -w $ORGANIZEUSER | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===ORGANIZEUSER process not exists or stop success"
        else
            kill -9 $P_ID
            echo "ORGANIZEUSER killed success"
        fi
        
         P_ID=`ps -ef | grep -w $JTMOP | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===JTMOP process not exists or stop success"
        else
            kill -9 $P_ID
            echo "JTMOP killed success"
        fi
 
        echo "===stop success==="
        ;;   
 
restart)
        $0 stop
        sleep 10
        $0 start
        echo "===restart success==="
        ;;   
esac    
exit 0

 

三. shell腳本批量啟動、批量停止、批量重啟等步驟: 

  1. 腳本名:startupAll.sh

  2. 先賦予腳本可執行權限:

chmod +x startupAll.sh

 3. 執行批量啟動的shell腳本命令:

./startupAll.sh start

 4. 執行批量停止的shell腳本命令:

./startupAll.sh stop

 5. 執行批量重啟的shell腳本命令:

./startupAll.sh restart  

 

四. 可能出現如下報錯:

  -bash: ./xxx.sh: /bin/sh^M: bad interpreter: No such file or directory

  錯誤介紹:

   通過上面我們可以看到有個^M個標志,這個標志是:Windows環境下dos格式文件傳輸到unix系統時,會在每行的結尾多一個^M,所以在執行的時候出現了這種現象,但是你在unix或者Linux環境下使用vi編輯的時候,會在下面顯示此文件的格式,比如” startupAll.sh” [dos] 2L,20C字樣,表示這是一個【dos】的格式文件,如果是MAC的系統則會出現【MAC】的字樣,因為文件格式的原因,有時候我們是unix程序或shell程序,則就要把dos文件轉化為unix的文件格式。

  錯誤解決方式:有如下四種解決方式

    解決方式1:

      也是最簡單的方法,直接在當前的文件目錄下執行下面命令

sed -i -e 's/\r$//' startupAll.sh

    解決方式2:

      使用unix/Linux中的vi命令,更改fileformat格式

      首先執行:

vi startupAll.sh
 
        

      使用vi startupAll.sh查看時在最后一行會出現了下面的

"startupAll.sh" [dos] 2L, 19C

      說明這個文件編碼方式是windows編輯的,必須轉化格式為unix格式 ,按ESC鍵,再次執行下面命令后

:set ff

      敲回車,出現如下

fileformat=dos

      修改為下面

vi test.sh
:set ff=unix
:x

    解決方式3:

      使用dos2unix和unix2dos命令

        Linux提供了兩種文本格式相互轉化的命令:dos2unix和unix2dos,dos2unix把”\r\n”轉化成”\n”,unixtodos把”\n”轉化成”\r\n”。Java程序中,使用 Runtime.getRuntime().exec(“unix2dos “+ fileName);來實現對文本格式互轉命令的調用。多說一句,執行指令前要先看看linux上是否有安裝unix2dos/dos2unix工具。

        1.首先查看是否安裝了這個工具,使用grep正則使用

yum list installed | grep -nE  'dos2unix|dos2'

         如果安裝了這個工具,則執行下面命令

dos2unix  startupAll.sh

        出現下面顯示說明轉化ok

[root@hostname webapps]# dos2unix j.sh
dos2unix: converting file j.sh to Unix format ...
[root@hostname webapps]#

    解決方式4:

      在編輯代碼的時候設置編輯器的line endings編碼方式

      如果你在Windows或Mac上使用sublime文本編輯腳本:單擊View > Line ending > Unix並再次保存文件。例如:

      

 

      在notepad++中,您可以通過按下按鈕為文件設置它 Edit –> EOL Conversion –> UNIX/OSX Format

      

 

      Eclipse用戶,您可以更改文件編碼直接從 File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶)

       

 

       或者更改 Unix on Window > Preferences > General > Workspace panel:

       

 

      通過以上4中方式,選擇其中一種即可,所以以后要注意這個文件的格式最好把你使用的編輯器設置為unix格式。

 

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM