linux shell腳本調用java main方法 代碼


 #!/bin/sh  
    #  
    #該腳本為Linux下啟動java程序的通用腳本。即可以作為開機自啟動service腳本被調用,  
    #也可以作為啟動java程序的獨立腳本來使用。  
    #  
    #Author: tudaxia.com, Date: 2011/6/7  
    #  
    #警告!!!:該腳本stop部分使用系統kill命令來強制終止指定的java程序進程。  
    #在殺死進程前,未作任何條件檢查。在某些情況下,如程序正在進行文件或數據庫寫操作,  
    #可能會造成數據丟失或數據不完整。如果必須要考慮到這類情況,則需要改寫此腳本,  
    #增加在執行kill命令前的一系列檢查。  
    #   
    ###################################  
    # 以下這些注釋設置可以被chkconfig命令讀取   
    # chkconfig: - 99 50   
    # description: Java程序啟動腳本   
    # processname: test   
    # config: 如果需要的話,可以配置   
    ###################################   
    #  
    ###################################  
    #環境變量及程序執行參數  
    #需要根據實際環境以及Java程序名稱來修改這些參數  
    ###################################  
    #JDK所在路徑  
    JAVA_HOME="/usr/java/jdk1.8.0_102"
    #執行程序啟動所使用的系統用戶,考慮到安全,推薦不使用root帳號  
    #RUNNING_USER=portal  
    #Java程序所在的目錄(classes的上一級目錄)  
    APP_HOME=/opt/tmp/geecuser/geec_calculate
    #需要啟動的Java主程序(main方法類)  
    APP_MAINCLASS=com.ai.core.start.Main  
    #拼湊完整的classpath參數,包括指定lib目錄下所有的jar  
    CLASSPATH=$APP_HOME/classes  
    for i in "$APP_HOME"/lib/*.jar; do  
       CLASSPATH="$CLASSPATH":"$i"  
    done
      
    #java虛擬機啟動參數  
    JAVA_OPTS="-ms1024m -mx1024m -Xmn512m -Djava.awt.headless=true -XX:MaxPermSize=256m"  
      
    ###################################  
    #(函數)判斷程序是否已啟動  
    #  
    #說明:  
    #使用JDK自帶的JPS命令及grep命令組合,准確查找pid  
    #jps 加 l 參數,表示顯示java的完整包路徑  
    #使用awk,分割出pid ($1部分),及Java程序名稱($2部分)  
    ###################################  
    #初始化psid變量(全局)  
    psid=0  
      
    checkpid() {  
       javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`  
      
       if [ -n "$javaps" ]; then  
          psid=`echo $javaps | awk '{print $1}'`  
       else  
          psid=0  
       fi  
    }  
      
    ###################################  
    #(函數)啟動程序  
    #  
    #說明:  
    #1. 首先調用checkpid函數,刷新$psid全局變量  
    #2. 如果程序已經啟動($psid不等於0),則提示程序已啟動  
    #3. 如果程序沒有被啟動,則執行啟動命令行  
    #4. 啟動命令執行后,再次調用checkpid函數  
    #5. 如果步驟4的結果能夠確認程序的pid,則打印[OK],否則打印[Failed]  
    #注意:echo -n 表示打印字符后,不換行  
    #注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法  
    ###################################  
    start() {  
       checkpid  
      
       if [ $psid -ne 0 ]; then  
          echo "================================"  
          echo "warn: $APP_MAINCLASS already started! (pid=$psid)"  
          echo "================================"  
       else  
          echo -n "Starting $APP_MAINCLASS ..."  
          JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >$APP_HOME/log/nohup 2>&1 &"  
          eval $JAVA_CMD  
          checkpid  
          if [ $psid -ne 0 ]; then  
             echo "(pid=$psid) [OK]"  
          else  
             echo "[Failed]"  
          fi  
       fi  
    }  
      
    ###################################  
    #(函數)停止程序  
    #  
    #說明:  
    #1. 首先調用checkpid函數,刷新$psid全局變量  
    #2. 如果程序已經啟動($psid不等於0),則開始執行停止,否則,提示程序未運行  
    #3. 使用kill -9 pid命令進行強制殺死進程  
    #4. 執行kill命令行緊接其后,馬上查看上一句命令的返回值: $?  
    #5. 如果步驟4的結果$?等於0,則打印[OK],否則打印[Failed]  
    #6. 為了防止java程序被啟動多次,這里增加反復檢查進程,反復殺死的處理(遞歸調用stop)。  
    #注意:echo -n 表示打印字符后,不換行  
    #注意: 在shell編程中,"$?" 表示上一句命令或者一個函數的返回值  
    ###################################  
    stop() {  
       checkpid  
      
       if [ $psid -ne 0 ]; then  
          echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "  
          kill -9 $psid
          if [ $? -eq 0 ]; then  
             echo "[OK]"  
          else  
             echo "[Failed]"  
          fi  
      
          checkpid  
          if [ $psid -ne 0 ]; then  
             stop  
          fi  
       else  
          echo "================================"  
          echo "warn: $APP_MAINCLASS is not running"  
          echo "================================"  
       fi  
    }  
      
    ###################################  
    #(函數)檢查程序運行狀態  
    #  
    #說明:  
    #1. 首先調用checkpid函數,刷新$psid全局變量  
    #2. 如果程序已經啟動($psid不等於0),則提示正在運行並表示出pid  
    #3. 否則,提示程序未運行  
    ###################################  
    status() {  
       checkpid  
      
       if [ $psid -ne 0 ];  then  
          echo "$APP_MAINCLASS is running! (pid=$psid)"  
       else  
          echo "$APP_MAINCLASS is not running"  
       fi  
    }  
      
    ###################################  
    #(函數)打印系統環境參數  
    ###################################  
    info() {  
       echo "System Information:"  
       echo "****************************"  
       echo `head -n 1 /etc/issue`  
       echo `uname -a`  
       echo  
       echo "JAVA_HOME=$JAVA_HOME"  
       echo `$JAVA_HOME/bin/java -version`  
       echo  
       echo "APP_HOME=$APP_HOME"  
       echo "APP_MAINCLASS=$APP_MAINCLASS"  
       echo "****************************"  
    }  
      
    ###################################  
    #讀取腳本的第一個參數($1),進行判斷  
    #參數取值范圍:{start|stop|restart|status|info}  
    #如參數不在指定范圍之內,則打印幫助信息  
    ###################################  
    case "$1" in  
       'start')  
          start  
          ;;  
       'stop')  
         stop  
         ;;  
       'restart')  
         stop  
         start  
         ;;  
       'status')  
         status  
         ;;  
       'info')  
         info  
         ;;  
      *)  
         echo "Usage: $0 {start|stop|restart|status|info}"  
         exit 1  
    esac  
    exit 0 

 


免責聲明!

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



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