java項目部署腳本

#!/bin/sh
#java
export JAVA_HOME=/root/java/jdk
#日誌目錄
export LOG_HOME=`pwd`/
#項目名稱
APP_NAME=xxx.jar
#jvm參數配置
export JAVA_OPTS="-server -Xmx1g -Xms1g -Xmn512m -XX:SurvivorRatio=4 -XX:PermSize=128m -XX:MaxPermSize=256m -Xss256k -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:GCPauseIntervalMillis=200 -XX:+DisableExplicitGC -Djava.awt.headless=true "

#檢查程序運行狀態
checkpid(){    
    javaps=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
    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 表示打印字符後,不換行  
###################################  
  
start() {  
   checkpid  
   if [ $psid -ne 0 ]; then  
      echo "================================"  
      echo "程序已經啓動! (pid=$psid)"  
      echo "================================"  
   else  
      echo "啓動 ..."  
      nohup $JAVA_HOME/bin/java $JAVA_OPTS -DLOG_HOME=$LOG_HOME  -jar $APP_NAME > /dev/null 2>&1 &
      echo $! > tpid
      echo "啓動成功!"
      checkpid  
      if [ $psid -ne 0 ]; then  
         echo "(pid=$psid) [OK]"  
      else  
         echo "[Failed]"  
      fi  
   fi  
}  

###################################  
#說明:  
#1. 首先調用checkpid函數,刷新$psid全局變量  
#2. 若是程序已經啓動($psid不等於0),則開始執行中止,不然,提示程序未運行  
#3. 使用kill -15 pid命令會先釋放本身的資源,而後在中止  
#4. 執行kill命令行緊接其後,立刻查看上一句命令的返回值: $?  
#5. 若是步驟4的結果$?等於0,則打印[OK],不然打印[Failed]  
#6. 爲了防止java程序被啓動屢次,這裏增長反覆檢查進程,反覆殺死的處理(遞歸調用stop)。  
#注意: 在shell編程中,"$?" 表示上一句命令或者一個函數的返回值  
###################################  
stop() {  
   checkpid  
   if [ $psid -ne 0 ]; then  
      echo -n "中止程序 ...(pid=$psid) "  
      kill -15 $psid  
      if [ $? -eq 0 ]; then  
         echo "[OK]"  
      else  
         echo "[Failed]"  
      fi  
  
      checkpid  
      if [ $psid -ne 0 ]; then  
         stop  
      fi  
   else  
      echo "================================"  
      echo "程序沒有運行!!!"  
      echo "================================"  
   fi  
}  

###################################  
#說明:  
#1. 首先調用checkpid函數,刷新$psid全局變量  
#2. 若是程序已經啓動($psid不等於0),則提示正在運行並表示出pid  
#3. 不然,提示程序未運行  
###################################  
status() {  
   checkpid  
   if [ $psid -ne 0 ];  then  
      echo "程序正在運行! (pid=$psid)"  
   else  
      echo "程序沒有運行!!!"  
   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_NAME=$APP_NAME"  
   echo "LOG_HOME=$LOG_HOME"  
   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