转自: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
 

最新文章

  1. backup4:数据库自动备份,自动删除备份文件
  2. 一种Flash页游前端3D转2D显示技术——PV2D, 颠覆传统吧!
  3. RabbitMQ(六)
  4. 让自己成为合格的IT员
  5. Java 基础【07】线程同步锁的选择
  6. less sass学习总结(——待续哦——)
  7. 在网页上添加QQ消息代码
  8. linux查看memcached状态
  9. python 代码片段5
  10. 禁用ipv6
  11. .NET软件汉化小实例
  12. codeforces 463D Gargari and Permutations(dp)
  13. Solr DIH dataconfig配置
  14. android之旅——开始
  15. des 加密 iOS
  16. JSP自定义标签——传统标签
  17. Datatable插件的简单的使用方式 和 学习方式
  18. 介绍下Python的两个标准库 os 和 sys
  19. spring容器启动原理分析1
  20. SPOJ 7258 Lexicographical Substring Search [后缀自动机 DP]

热门文章

  1. seq和{ }生成序列
  2. 19:django 分页
  3. NYOJ 116 士兵杀敌二
  4. linux下环境变量设置的问题
  5. 树莓派使用opencv
  6. 关于微信获取access_token接口,返回值为-1000的问题
  7. lr_Vugen界面图
  8. Sqli-labs less 2
  9. webpack2 热加载js 文件
  10. BZOJ 1106 [POI2007]立方体大作战tet(树状数组)