Linux下啟動和停止Java應用程序的Shell腳本


轉自:http://blog.csdn.net/jadyer/article/details/7960802

 

資料參考來源自 兔大俠,並略作修改: http://www.tudaxia.com/archives/10,在此鳴謝!!

[Ruby]  view plain copy print ?
 
  1. #!/bin/sh  
  2. #-------------------------------------------------------------------------------------------------------------  
  3. #實際使用中,需注意以下兩點  
  4. #1)直接在Linux/UNIX上面創建並編寫shell腳本  
  5. #  這是因為Windows下編寫的*.sh文檔格式和編碼,是Linux/UNIX所不能完全承認的  
  6. #  最直接的體現就是使用過程中會遇到很多似是而非的錯誤,這曾經搞瘋了一大片人  
  7. #2)編寫完*.sh之后,記得[chmod 755 *.sh],否則會提示無法執行or沒有權限執行等等  
  8. #-------------------------------------------------------------------------------------------------------------  
  9. #JDK路徑  
  10. #JAVA_HOME="/usr/java/jdk1.6.0_31"  
  11.   
  12. #JVM啟動參數  
  13. #-server:一定要作為第一個參數,在多個CPU時性能佳  
  14. #-Xloggc:記錄GC日志,這里建議寫成絕對路徑,如此便可在任意目錄下執行該shell腳本  
  15. #JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"  
  16. JAVA_OPTS="-Duser.timezone=GMT+8 -server -Xms512m -Xmx512m -Xloggc:/app/code/CucPayTradePortalLog/gc.log"  
  17.   
  18. #Java程序日志所在的目錄  
  19. APP_LOG=/app/code/CucPayTradePortalLog  
  20.   
  21. #Java程序主體所在的目錄,即classes的上一級目錄  
  22. APP_HOME=/app/code/CucPayTradePortal  
  23.   
  24. #Java主程序,即main(String[] args)方法類  
  25. APP_MAIN=com.cucpay.tradeportal.MainApp  
  26.   
  27. #classpath參數,包括指定lib目錄下的所有jar  
  28. CLASSPATH=$APP_HOME/classes  
  29.   
  30. for tradePortalJar in "$APP_HOME"/lib/*.jar  
  31. do  
  32.    CLASSPATH="$CLASSPATH":"$tradePortalJar"  
  33. done  
  34.   
  35. #-------------------------------------------------------------------------------------------------------------  
  36. #getTradeProtalPID()-->獲取Java應用的PID  
  37. #說明:通過JDK自帶的JPS命令及grep命令,准確查找Java應用的PID  
  38. #其中:[jps -l]表示顯示Java主程序的完整包路徑  
  39. #     awk命令可以分割出PID($1部分)及Java主程序名稱($2部分)  
  40. #例子:[$JAVA_HOME/bin/jps -l | grep $APP_MAIN]-->>[5775 com.cucpay.tradeportal.MainApp]  
  41. #另外:用這個命令也可以直接取到程序的PID-->>[ps aux|grep java|grep $APP_MAIN|grep -v grep|awk '{print $2}']  
  42. #-------------------------------------------------------------------------------------------------------------  
  43. #初始化全局變量tradePortalPID,用於標識交易前置系統的PID,0表示未啟動  
  44. tradePortalPID=0  
  45.    
  46. getTradeProtalPID(){  
  47.     javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`  
  48.     if [ -n "$javaps" ]; then  
  49.         tradePortalPID=`echo $javaps | awk '{print $1}'`  
  50.     else  
  51.         tradePortalPID=0  
  52.     fi  
  53. }  
  54.   
  55. #-------------------------------------------------------------------------------------------------------------  
  56. #startup()-->啟動Java應用程序  
  57. #步驟:1)調用getTradeProtalPID()函數,刷新$tradePortalPID全局變量  
  58. #     2)若程序已經啟動($tradePortalPID不等於0),則提示程序已啟動  
  59. #     3)若程序未被啟動,則執行啟動命令  
  60. #     4)啟動命令執行后,再次調用getTradeProtalPID()函數  
  61. #     5)若步驟4執行后,程序的PID不等於0,則打印[Success],否則打印[Failed]  
  62. #注意:[echo -n]表示打印字符后,不換行  
  63. #注意:[nohup command > /path/nohup.log &]是將作業輸出到nohup.log,否則它會輸出到該腳本目錄下的nohup.out中  
  64. #-------------------------------------------------------------------------------------------------------------  
  65. startup(){  
  66.     getTradeProtalPID  
  67.     echo "======================================================================================"  
  68.     if [ $tradePortalPID -ne 0 ]; then  
  69.         echo "$APP_MAIN already started(PID=$tradePortalPID)"  
  70.         echo "======================================================================================"  
  71.     else  
  72.         echo -n "Starting $APP_MAIN"  
  73.         nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN > $APP_LOG/nohup.log &  
  74.         getTradeProtalPID  
  75.         if [ $tradePortalPID -ne 0 ]; then  
  76.             echo "(PID=$tradePortalPID)...[Success]"  
  77.             echo "======================================================================================"  
  78.         else  
  79.             echo "[Failed]"  
  80.             echo "======================================================================================"  
  81.         fi  
  82.     fi  
  83. }  
  84.   
  85. #-------------------------------------------------------------------------------------------------------------  
  86. #shutdown()-->停止Java應用程序  
  87. #步驟:1)調用getTradeProtalPID()函數,刷新$tradePortalPID全局變量  
  88. #     2)若程序已經啟動($tradePortalPID不等於0),則開始執行停止程序操作,否則提示程序未運行  
  89. #     3)使用[kill -9 PID]命令強制殺掉進程  
  90. #     4)使用[$?]獲取上一句命令的返回值,若其為0,表示程序已停止運行,則打印[Success],反之則打印[Failed]  
  91. #     5)為防止Java程序被啟動多次,這里增加了反復檢查程序進程的功能,通過遞歸調用shutdown()函數的方式,反復kill  
  92. #注意:Shell編程中,[$?]表示上一句命令或者上一個函數的返回值  
  93. #-------------------------------------------------------------------------------------------------------------  
  94. shutdown(){  
  95.     getTradeProtalPID  
  96.     echo "======================================================================================"  
  97.     if [ $tradePortalPID -ne 0 ]; then  
  98.         echo -n "Stopping $APP_MAIN(PID=$tradePortalPID)..."  
  99.         kill -9 $tradePortalPID  
  100.         if [ $? -eq 0 ]; then  
  101.             echo "[Success]"  
  102.             echo "======================================================================================"  
  103.         else  
  104.             echo "[Failed]"  
  105.             echo "======================================================================================"  
  106.         fi  
  107.         getTradeProtalPID  
  108.         if [ $tradePortalPID -ne 0 ]; then  
  109.             shutdown  
  110.         fi  
  111.     else  
  112.         echo "$APP_MAIN is not running"  
  113.         echo "======================================================================================"  
  114.     fi  
  115. }  
  116.   
  117. #-------------------------------------------------------------------------------------------------------------  
  118. #getServerStatus()-->檢查程序運行狀態  
  119. #-------------------------------------------------------------------------------------------------------------  
  120. getServerStatus(){  
  121.     getTradeProtalPID  
  122.     echo "======================================================================================"  
  123.     if [ $tradePortalPID -ne 0 ]; then  
  124.         echo "$APP_MAIN is running(PID=$tradePortalPID)"  
  125.         echo "======================================================================================"  
  126.     else  
  127.         echo "$APP_MAIN is not running"  
  128.         echo "======================================================================================"  
  129.     fi  
  130. }  

下面是我整理的用於啟動Java應用程序的startup.sh(可單獨使用)

[ruby]  view plain copy print ?
 
  1. #!/bin/sh  
  2. #-------------------------------------------------------------------------------------------------------------  
  3. #該腳本的使用方式為-->[sh startup.sh]  
  4. #該腳本可在服務器上的任意目錄下執行,不會影響到日志的輸出位置等  
  5. #-------------------------------------------------------------------------------------------------------------  
  6. #JAVA_HOME="/usr/java/jdk1.6.0_31"  
  7. JAVA_OPTS="-Duser.timezone=GMT+8 -server -Xms2048m -Xmx2048m -Xloggc:/app/code/CucPayTradePortalLog/gc.log"  
  8. APP_LOG=/app/code/CucPayTradePortalLog  
  9. APP_HOME=/app/code/CucPayTradePortal  
  10. APP_MAIN=com.cucpay.tradeportal.MainApp  
  11. CLASSPATH=$APP_HOME/classes  
  12. for tradePortalJar in "$APP_HOME"/lib/*.jar;  
  13. do  
  14.    CLASSPATH="$CLASSPATH":"$tradePortalJar"  
  15. done  
  16.   
  17. tradePortalPID=0  
  18.   
  19. getTradeProtalPID(){  
  20.     javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`  
  21.     if [ -n "$javaps" ]; then  
  22.         tradePortalPID=`echo $javaps | awk '{print $1}'`  
  23.     else  
  24.         tradePortalPID=0  
  25.     fi  
  26. }  
  27.   
  28. startup(){  
  29.     getTradeProtalPID  
  30.     echo "================================================================================================================"  
  31.     if [ $tradePortalPID -ne 0 ]; then  
  32.         echo "$APP_MAIN already started(PID=$tradePortalPID)"  
  33.         echo "================================================================================================================"  
  34.     else  
  35.         echo -n "Starting $APP_MAIN"  
  36.         nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN > $APP_LOG/nohup.log &  
  37.         getTradeProtalPID  
  38.         if [ $tradePortalPID -ne 0 ]; then  
  39.             echo "(PID=$tradePortalPID)...[Success]"  
  40.             echo "================================================================================================================"  
  41.         else  
  42.             echo "[Failed]"  
  43.             echo "================================================================================================================"  
  44.         fi  
  45.     fi  
  46. }  
  47.   
  48. startup  

下面是我整理的用於停止Java應用程序的shutdown.sh(可單獨使用)

[ruby]  view plain copy print ?
 
  1. #!/bin/sh  
  2. APP_MAIN=com.cucpay.tradeportal.MainApp  
  3.   
  4. tradePortalPID=0  
  5.    
  6. getTradeProtalPID(){  
  7.     javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`  
  8.     if [ -n "$javaps" ]; then  
  9.         tradePortalPID=`echo $javaps | awk '{print $1}'`  
  10.     else  
  11.         tradePortalPID=0  
  12.     fi  
  13. }  
  14.   
  15. shutdown(){  
  16.     getTradeProtalPID  
  17.     echo "================================================================================================================"  
  18.     if [ $tradePortalPID -ne 0 ]; then  
  19.         echo -n "Stopping $APP_MAIN(PID=$tradePortalPID)..."  
  20.         kill -9 $tradePortalPID  
  21.         if [ $? -eq 0 ]; then  
  22.             echo "[Success]"  
  23.             echo "================================================================================================================"  
  24.         else  
  25.             echo "[Failed]"  
  26.             echo "================================================================================================================"  
  27.         fi  
  28.         getTradeProtalPID  
  29.         if [ $tradePortalPID -ne 0 ]; then  
  30.             shutdown  
  31.         fi  
  32.     else  
  33.         echo "$APP_MAIN is not running"  
  34.         echo "================================================================================================================"  
  35.     fi  
  36. }  
  37.   
  38. shutdown  

最后是我整理的用於查看Java應用程序運行狀態的serverStatus.sh(可單獨使用)
[ruby]  view plain copy print ?
 
  1. #!/bin/sh  
  2. APP_MAIN=com.cucpay.tradeportal.MainApp  
  3.   
  4. tradePortalPID=0  
  5.   
  6. getTradeProtalPID(){  
  7.     javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`  
  8.     if [ -n "$javaps" ]; then  
  9.         tradePortalPID=`echo $javaps | awk '{print $1}'`  
  10.     else  
  11.         tradePortalPID=0  
  12.     fi  
  13. }  
  14.   
  15. getServerStatus(){  
  16.     getTradeProtalPID  
  17.     echo "================================================================================================================"  
  18.     if [ $tradePortalPID -ne 0 ]; then  
  19.         echo "$APP_MAIN is running(PID=$tradePortalPID)"  
  20.         echo "================================================================================================================"  
  21.     else  
  22.         echo "$APP_MAIN is not running"  
  23.         echo "================================================================================================================"  
  24.     fi  
  25. }  
  26.   
  27. getServerStatus  
 


免責聲明!

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



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