启动和停止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. #JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"  
  14. JAVA_OPTS="-Duser.timezone=GMT+8 -Xms256m -Xmx512m"  
  15.   
  16. #Java程序所在的目录,即classes的上一级目录  
  17. APP_HOME=/app/code/CucPayTradePortal  
  18.   
  19. #Java主程序,即main(String[] args)方法类  
  20. APP_MAIN=cn.com.nantian.cucpaytradeportal.main.Main  
  21.   
  22. #classpath参数,包括指定lib目录下的所有jar  
  23. CLASSPATH=$APP_HOME/classes  
  24.   
  25. for tradePortalJar in "$APP_HOME"/lib/*.jar;  
  26. do  
  27.    CLASSPATH="$CLASSPATH":"$tradePortalJar"  
  28. done  
  29.   
  30. #-------------------------------------------------------------------------------------------------------------  
  31. #getTradeProtalPID()-->获取Java应用的PID  
  32. #说明:通过JDK自带的JPS命令及grep命令,准确查找Java应用的PID  
  33. #其中:[jps -l]表示显示Java主程序的完整包路径  
  34. #     awk命令可以分割出PID($1部分)及Java主程序名称($2部分)  
  35. #例子:[$JAVA_HOME/bin/jps -l | grep $APP_MAIN]-->>[5775 cn.com.nantian.cucpaytradeportal.main.Main]  
  36. #另外:用这个命令也可以直接取到程序的PID-->>[ps aux|grep java|grep $APP_MAIN|grep -v grep|awk '{print $2}']  
  37. #-------------------------------------------------------------------------------------------------------------  
  38. #初始化全局变量tradePortalPID,用于标识交易前置系统的PID,0表示未启动  
  39. tradePortalPID=0  
  40.    
  41. getTradeProtalPID(){  
  42.     javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`  
  43.     if [ -n "$javaps" ]; then  
  44.         tradePortalPID=`echo $javaps | awk '{print $1}'`  
  45.     else  
  46.         tradePortalPID=0  
  47.     fi  
  48. }  
  49.   
  50. #-------------------------------------------------------------------------------------------------------------  
  51. #startup()-->启动Java应用程序  
  52. #步骤:1)调用getTradeProtalPID()函数,刷新$tradePortalPID全局变量  
  53. #     2)若程序已经启动($tradePortalPID不等于0),则提示程序已启动  
  54. #     3)若程序未被启动,则执行启动命令行  
  55. #     4)启动命令执行后,再次调用getTradeProtalPID()函数  
  56. #     5)若步骤4执行后,程序的PID不等于0,则打印[Success],否则打印[Failed]  
  57. #注意:[echo -n]表示打印字符后,不换行  
  58. #-------------------------------------------------------------------------------------------------------------  
  59. startup(){  
  60.     getTradeProtalPID  
  61.     echo "======================================================================================"  
  62.     if [ $tradePortalPID -ne 0 ]; then  
  63.         echo "$APP_MAIN already started(PID=$tradePortalPID)"  
  64.         echo "======================================================================================"  
  65.     else  
  66.         echo -n "Starting $APP_MAIN"  
  67.         nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN &  
  68.         getTradeProtalPID  
  69.         if [ $tradePortalPID -ne 0 ]; then  
  70.             echo "(PID=$tradePortalPID)...[Success]"  
  71.             echo "======================================================================================"  
  72.         else  
  73.             echo "[Failed]"  
  74.             echo "======================================================================================"  
  75.         fi  
  76.     fi  
  77. }  
  78.   
  79. #-------------------------------------------------------------------------------------------------------------  
  80. #shutdown()-->停止Java应用程序  
  81. #步骤:1)调用getTradeProtalPID()函数,刷新$tradePortalPID全局变量  
  82. #     2)若程序已经启动($tradePortalPID不等于0),则开始执行停止程序操作,否则提示程序未运行  
  83. #     3)使用[kill -9 PID]命令强制杀掉进程  
  84. #     4)使用[$?]获取上一句命令的返回值,若其为0,表示程序已停止运行,则打印[Success],反之则打印[Failed]  
  85. #     5)为防止Java程序被启动多次,这里增加了反复检查程序进程的功能,通过递归调用shutdown()函数的方式,反复kill  
  86. #注意:Shell编程中,[$?]表示上一句命令或者上一个函数的返回值  
  87. #-------------------------------------------------------------------------------------------------------------  
  88. shutdown(){  
  89.     getTradeProtalPID  
  90.     echo "======================================================================================"  
  91.     if [ $tradePortalPID -ne 0 ]; then  
  92.         echo -n "Stopping $APP_MAIN(PID=$tradePortalPID)..."  
  93.         kill -9 $tradePortalPID  
  94.         if [ $? -eq 0 ]; then  
  95.             echo "[Success]"  
  96.             echo "======================================================================================"  
  97.         else  
  98.             echo "[Failed]"  
  99.             echo "======================================================================================"  
  100.         fi  
  101.         getTradeProtalPID  
  102.         if [ $tradePortalPID -ne 0 ]; then  
  103.             shutdown  
  104.         fi  
  105.     else  
  106.         echo "$APP_MAIN is not running"  
  107.         echo "======================================================================================"  
  108.     fi  
  109. }  
  110.   
  111. #-------------------------------------------------------------------------------------------------------------  
  112. #getServerStatus()-->检查程序运行状态  
  113. #-------------------------------------------------------------------------------------------------------------  
  114. getServerStatus(){  
  115.     getTradeProtalPID  
  116.     echo "======================================================================================"  
  117.     if [ $tradePortalPID -ne 0 ]; then  
  118.         echo "$APP_MAIN is running(PID=$tradePortalPID)"  
  119.         echo "======================================================================================"  
  120.     else  
  121.         echo "$APP_MAIN is not running"  
  122.         echo "======================================================================================"  
  123.     fi  
  124. }  

下面是我整理的用于启动Java应用程序的startup.sh(可单独使用)

[ruby]  view plain copy print ?
  1. #!/bin/sh  
  2. #-------------------------------------------------------------------------------------------------------------  
  3. #该脚本的使用方式为-->[sh startup.sh]  
  4. #-------------------------------------------------------------------------------------------------------------  
  5. #JAVA_HOME="/usr/java/jdk1.6.0_31"  
  6. JAVA_OPTS="-Duser.timezone=GMT+8 -Xms256m -Xmx512m"  
  7. APP_HOME=/app/code/CucPayTradePortal  
  8. APP_MAIN=cn.com.nantian.cucpaytradeportal.main.Main  
  9. CLASSPATH=$APP_HOME/classes  
  10. for tradePortalJar in "$APP_HOME"/lib/*.jar;  
  11. do  
  12.    CLASSPATH="$CLASSPATH":"$tradePortalJar"  
  13. done  
  14.   
  15. tradePortalPID=0  
  16.   
  17. getTradeProtalPID(){  
  18.     javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`  
  19.     if [ -n "$javaps" ]; then  
  20.         tradePortalPID=`echo $javaps | awk '{print $1}'`  
  21.     else  
  22.         tradePortalPID=0  
  23.     fi  
  24. }  
  25.   
  26. startup(){  
  27.     getTradeProtalPID  
  28.     echo "================================================================================================================"  
  29.     if [ $tradePortalPID -ne 0 ]; then  
  30.         echo "$APP_MAIN already started(PID=$tradePortalPID)"  
  31.         echo "================================================================================================================"  
  32.     else  
  33.         echo -n "Starting $APP_MAIN"  
  34.         nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN &  
  35.         getTradeProtalPID  
  36.         if [ $tradePortalPID -ne 0 ]; then  
  37.             echo "(PID=$tradePortalPID)...[Success]"  
  38.             echo "================================================================================================================"  
  39.         else  
  40.             echo "[Failed]"  
  41.             echo "================================================================================================================"  
  42.         fi  
  43.     fi  
  44. }  
  45.   
  46. startup  

下面是我整理的用于停止Java应用程序的shutdown.sh(可单独使用)

[ruby]  view plain copy print ?
  1. #!/bin/sh  
  2. APP_MAIN=cn.com.nantian.cucpaytradeportal.main.Main  
  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=cn.com.nantian.cucpaytradeportal.main.Main  
  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  


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值