转自: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. 浅谈Javascript设计模式

    什么是模式 模式是一种可复用的解决方案,可用于解决软件设计中遇到的常见问题. 也就是说用来解决常见问题的可复用的解决方案. 常见的js设计模式 Constructor(构造器)模式 Construct ...

  2. leetcode 之Swap Nodes in Pairs(21)

    不允许通过值来交换,在更新指针时需要小心. ListNode *swapNodes(ListNode* head) { ListNode dummy(-); dummy.next = head; fo ...

  3. 【python】发送邮件

    从网上找了一些用python发邮件的教程,学习一下: 1.发送普通的文本邮件 http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.ht ...

  4. sql查询语句查询顺序

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

  5. LeetCode解题报告—— Unique Binary Search Trees & Binary Tree Level Order Traversal & Binary Tree Zigzag Level Order Traversal

    1. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that ...

  6. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记5——Direct3D中的顶点缓存和索引缓存

    第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物 ...

  7. _stdcall调用

    以前看windows编程时一直有个 _stdcall 函数调用约定 一直不是很理解,只能硬记. 现在终于在<程序是怎样跑起来的>这本书书中找到了答案. 1. _stdcall 是stand ...

  8. RedHat7/Centos7 搭建NFS服务器

    https://blog.csdn.net/u012124304/article/details/81001068 客户端和服务器都得安装nfs-utils

  9. Delphi使程序的窗口出现在最前面并激活

    procedure setAppFront(); //使程序的窗口出现在最前面并激活 var pt, OldPt, NewPt: TPoint; begin //判断Application是否最小化, ...

  10. PHP实现RESTful风格的API实例

    原生方式实现,直接撸代码 Request.php :包含一个Request类,即数据操作类.接收到URL的数据后,根据请求URL的方式(GET|POST|PUT|PATCH|DELETE)对数据进行相 ...