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

下面是我整理的用于启动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. tradePortalPID=0
  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. startup(){
  26. getTradeProtalPID
  27. echo "================================================================================================================"
  28. if [ $tradePortalPID -ne 0 ]; then
  29. echo "$APP_MAIN already started(PID=$tradePortalPID)"
  30. echo "================================================================================================================"
  31. else
  32. echo -n "Starting $APP_MAIN"
  33. nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN > $APP_LOG/nohup.log &
  34. getTradeProtalPID
  35. if [ $tradePortalPID -ne 0 ]; then
  36. echo "(PID=$tradePortalPID)...[Success]"
  37. echo "================================================================================================================"
  38. else
  39. echo "[Failed]"
  40. echo "================================================================================================================"
  41. fi
  42. fi
  43. }
  44. startup

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

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

最后是我整理的用于查看Java应用程序运行状态的serverStatus.sh(可单独使用)

  1. #!/bin/sh
  2. APP_MAIN=com.cucpay.tradeportal.MainApp
  3. tradePortalPID=0
  4. getTradeProtalPID(){
  5. javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`
  6. if [ -n "$javaps" ]; then
  7. tradePortalPID=`echo $javaps | awk '{print $1}'`
  8. else
  9. tradePortalPID=0
  10. fi
  11. }
  12. getServerStatus(){
  13. getTradeProtalPID
  14. echo "================================================================================================================"
  15. if [ $tradePortalPID -ne 0 ]; then
  16. echo "$APP_MAIN is running(PID=$tradePortalPID)"
  17. echo "================================================================================================================"
  18. else
  19. echo "$APP_MAIN is not running"
  20. echo "================================================================================================================"
  21. fi
  22. }
  23. getServerStatus
 

Linux下启动和停止Java应用程序的Shell脚本的更多相关文章

  1. linux下启动和终止JAVA程序shell脚本

    1.启动脚本start.sh #run application backgroud nohup java -jar chess-admin->& & #record the pr ...

  2. linux下启动、停止tomcat,杀死tomcat进程

    1.打开终端 cd /java/tomcat 2.执行 bin/startup.sh #启动tomcat bin/shutdown.sh #停止tomcat tail -f logs/catalina ...

  3. Linux下启动、停止xampp命令

    启动xampp: /opt/lampp/./lampp start 停止xampp: /opt/lampp/./lampp stop 卸载xampp: rm -rf /opt/lampp

  4. Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space

    一.错误信息 java.lang.reflect.InvocationTargetException    at sun.reflect.NativeMethodAccessorImpl.invoke ...

  5. 在linux下sh批处理文件调用java的方法

    解密 java -classpath collection-impl-0.0.1.jar com.ai.toptea.collection.message.DESEncrypt 1EFE4663895 ...

  6. 在Linux下启动Java服务的脚本

    #!/bin/sh #该脚本为Linux下启动java程序的通用脚本.即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用. # #Author: tudaxi ...

  7. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  8. linux 下启动java jar包 shell

    linux 下启动java jar包 shell #!/bin/sh JAVA_HOME=/usr/local/jdk1.6.0_34/bin/javaJAVA_OPTS="-Xmx256m ...

  9. Linux下启动Oracle服务和监听程序步骤

    Linux下启动Oracle服务和监听程序启动和关闭步骤整理如下: 1.安装oracle: 2.创建oracle系统用户: 3./home/oracle下面的.bash_profile添加几个环境变量 ...

随机推荐

  1. js中常用的数组方法

    在数组的尾部增加或删除某个元素:push() 和 pop() push() : 在数组的尾部追加一个或多个元素,并返回数组的长度 pop():在数组的尾部删除一个元素,并返回被删除项 var arr ...

  2. experss 做小型服务器出现跨域问题

    情况是这样的 我用express做一个小型的服务器来做我demo项目的一个接口 然后我就出现了跨域问题 然后我就 app.all('/*', function(req, res, next) { // ...

  3. hdu 3435(KM算法最优匹配)

    A new Graph Game Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. Restore IP Addresses——边界条件判定

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  5. Divide Two Integers——二分法的经典变形

    Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...

  6. C++编译常见错误

    error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To di ...

  7. google code-prettify 代码高亮插件使用方法

    找代码高亮插件选了好久,还是这个使用起来比较方便. 先上链接:插件下载地址 官方使用方法地址 建议看官方的资料,我这里仅仅简要描述一下使用方法: 引入方法: 测试引入是否成功:herf 换成 自己放置 ...

  8. SEO:查找网站的百度收录情况和如何让百度快速收录

    查询收录的工具地址: http://tool.chinaz.com/baidu/entry/ 如何让百度快速收录: 一.大家都熟知的百度网站提交,只需要提交网站的首页即可.以前做完这一步就被百度收录的 ...

  9. 微信小程序-二维码汇总

    小程序二维码在生活中的应用场景很多,比如营销类一物一码,扫码开门,扫码付款等...小程序二维码分两种? 1.普通链接二维码 即跟普通的网站链接生成的二维码是一个意思,这种二维码的局限性如下: 对于普通 ...

  10. Python基础系列----字典、基本语句

    1.定义                                                                                               映 ...