zoukankan      html  css  js  c++  java
  • 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  
     
  • 相关阅读:
    ORA-01536: 超出表空间 'tablespace_name' 的空间限额
    Oracle数据库表索引失效,解决办法:修改Oracle数据库优化器模式
    解决response.setHeader("Content-disposition" 中文乱码问题
    MyBatis配置:在控制台打印SQL语句
    JS 字符串转日期格式 日期格式化字符串
    远程桌面管理工具Remote Desktop Connection Manager
    调整Windows操作系统下时间同步的频率
    Oracle数据库中字符型字段按数字排序
    “Error:(1, 1) java: 非法字符: 'ufeff'”错误解决办法
    本次孩子流感总结
  • 原文地址:https://www.cnblogs.com/x_wukong/p/4444625.html
Copyright © 2011-2022 走看看