Linux下启动和停止Java应用程序的Shell脚本

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

资料参考来源自兔大侠,并略作修改:http://www.tudaxia.com/archives/10,在此鸣谢!!

  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(可单独使用)

  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(可单独使用)

  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(可单独使用)
  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  
 
原文地址:https://www.cnblogs.com/x_wukong/p/4444625.html