shell脚本运行java程序

前端之家收集整理的这篇文章主要介绍了shell脚本运行java程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

通过下面shell脚本来启停java程序

  1. #!/bin/sh
  2. ###################################
  3. #环境变量及程序执行参数
  4. #需要根据实际环境以及Java程序名称修改这些参数
  5. ###################################
  6. #JDK所在路径
  7. JAVA_HOME="/usr/local/jdk1.8.0_131"
  8.  
  9. #执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号
  10. RUNNING_USER=lee
  11.  
  12. #Java程序所在的目录(classes的上一级目录)
  13. APP_HOME=/home/lee/Coding/cjava/2
  14.  
  15. #需要启动的Java主程序(main方法类)
  16. APP_MAINCLASS=huateng/hello
  17.  
  18. #拼凑完整的classpath参数,包括指定lib目录下所有的jar
  19. #CLASSPATH=$APP_HOME/classes
  20. #for i in "$APP_HOME"/lib/*.jar; do
  21. # CLASSPATH="$CLASSPATH":"$i"
  22. #done
  23.  
  24. #java虚拟机启动参数
  25. JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"
  26.  
  27. ###################################
  28. #(函数)判断程序是否已启动
  29. #
  30. #说明:
  31. #使用JDK自带的JPS命令及grep命令组合,准确查找pid
  32. #jps 加 l 参数,表示显示java的完整包路径
  33. #使用awk,分割出pid ($1部分),及Java程序名称($2部分)
  34. ###################################
  35. #初始化psid变量(全局)
  36. psid=0
  37.  
  38. checkpid() {
  39. javaps=`ps -ef | grep $APP_MAINCLASS | grep -v "grep"`
  40.  
  41. if [ -n "$javaps" ]; then
  42. psid=`echo $javaps | awk '{print $2}'`
  43. else
  44. psid=0
  45. fi
  46. }
  47.  
  48. ###################################
  49. #(函数)启动程序
  50. #
  51. #说明:
  52. #1. 首先调用checkpid函数,刷新$psid全局变量
  53. #2. 如果程序已经启动($psid不等于0),则提示程序已启动
  54. #3. 如果程序没有被启动,则执行启动命令行
  55. #4. 启动命令执行后,再次调用checkpid函数
  56. #5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed]
  57. #注意:echo -n 表示打印字符后,不换行
  58. #注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法
  59. ###################################
  60. start() {
  61. checkpid
  62.  
  63. if [ $psid -ne 0 ]; then
  64. echo "================================"
  65. echo "warn: $APP_MAINCLASS already started! (pid=$psid)"
  66. echo "================================"
  67. else
  68. echo -n "Starting $APP_MAINCLASS ..."
  69. nohup $JAVA_HOME/bin/java $JAVA_OPTS $APP_MAINCLASS >/home/lee/Coding/cjava/2/out.log 2>&1 &
  70. checkpid
  71. if [ $psid -ne 0 ]; then
  72. echo "(pid=$psid) [OK]"
  73. else
  74. echo "[Failed]"
  75. fi
  76. fi
  77. }
  78.  
  79. ###################################
  80. #(函数)停止程序
  81. #
  82. #说明:
  83. #1. 首先调用checkpid函数,刷新$psid全局变量
  84. #2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行
  85. #3. 使用kill -9 pid命令进行强制杀死进程
  86. #4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?
  87. #5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]
  88. #6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。
  89. #注意:echo -n 表示打印字符后,不换行
  90. #注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值
  91. ###################################
  92. stop() {
  93. checkpid
  94.  
  95. if [ $psid -ne 0 ]; then
  96. echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "
  97. kill -9 $psid
  98. if [ $? -eq 0 ]; then
  99. echo "[OK]"
  100. else
  101. echo "[Failed]"
  102. fi
  103.  
  104. checkpid
  105. if [ $psid -ne 0 ]; then
  106. stop
  107. fi
  108. else
  109. echo "================================"
  110. echo "warn: $APP_MAINCLASS is not running"
  111. echo "================================"
  112. fi
  113. }
  114.  
  115. ###################################
  116. #(函数)检查程序运行状态
  117. #
  118. #说明:
  119. #1. 首先调用checkpid函数,刷新$psid全局变量
  120. #2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid
  121. #3. 否则,提示程序未运行
  122. ###################################
  123. status() {
  124. checkpid
  125.  
  126. if [ $psid -ne 0 ]; then
  127. echo "$APP_MAINCLASS is running! (pid=$psid)"
  128. else
  129. echo "$APP_MAINCLASS is not running"
  130. fi
  131. }
  132.  
  133. ###################################
  134. #(函数)打印系统环境参数
  135. ###################################
  136. info() {
  137. echo "System Information:"
  138. echo "****************************"
  139. echo `head -n 1 /etc/issue`
  140. echo `uname -a`
  141. echo
  142. echo "JAVA_HOME=$JAVA_HOME"
  143. echo `$JAVA_HOME/bin/java -version`
  144. echo
  145. echo "APP_HOME=$APP_HOME"
  146. echo "APP_MAINCLASS=$APP_MAINCLASS"
  147. echo "****************************"
  148. }
  149.  
  150. ###################################
  151. #读取脚本的第一个参数($1),进行判断
  152. #参数取值范围:{start|stop|restart|status|info}
  153. #如参数不在指定范围之内,则打印帮助信息
  154. ###################################
  155. case "$1" in
  156. 'start')
  157. start
  158. ;;
  159. 'stop')
  160. stop
  161. ;;
  162. 'restart')
  163. stop
  164. start
  165. ;;
  166. 'status')
  167. status
  168. ;;
  169. 'info')
  170. info
  171. ;;
  172. *)
  173. echo "Usage: $0 {start|stop|restart|status|info}"
  174. exit 1
  175. esac

猜你在找的Bash相关文章