#!/bin/bash
# The three branches of the scouting program,Add to auto.
 # chkconfig: 2345 20 80
 # description: py-0.0.1-SNAPSHOT-exec.jar
 # author: Love丶TG
# 这样的启动方式不是最好的,一般都是:友好的控制nginx执行连接端口,再处理启动与停止操作
 echo "******************************************************"
 echo "******* Welcome to launch the puzzle App *************"
 echo "******************************************************"
# import JDK config
 JAVA_HOME=/usr/java/jdk1.8.0_111
 JRE_HOME=/usr/java/jdk1.8.0_111/jre
 PATH=$PATH:$JAVA_HOME/bin:$JRe_HOME/bin:$TOMCAT_HOME/bin
 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
 export JAVA_HOME JRE_HOME PATH CLASSPATH
# Second parameter : project url   |   PRO_URL expression
 #PRO_URL=/project/py/pyapp2018-07-25
# The file stores the startup path
 PRO_URL=/project/py/py_path
function initialize(){
     # 判断PRO_URL文件是否存在,不存在就新建这么一个文件,用于当每次调用第二个参数启动时都会随着更改文件里面的内容
     if [ ! -f "$PRO_URL" ]; then
         touch $PRO_URL
         chmod 777 $PRO_URL
     fi
     # 取项目的待执行目录
     readFile=`cat $PRO_URL`
     if [ "$readFile" == "" ];then
         echo "-----> The read file was empty and failed to start <-----"
         # echo "" > $PRO_URL
         # echo "$1 cleaned up."
     else
         echo "-----> The project is being restarted <-----"
         cd $readFile
         # 检查8088 8089 8090端口是否启动状态
         process1=`netstat -an|grep LISTEN|grep :8088`
         # 如果端口检查为空就重启8088服务
         if [ "$process1" == "" ];then
             fStart 8088
             echo "-----> 8088 Port started successfully <-----"
         else
             echo "-----> The 8088 port is running <-----"
         fi
         process2=`netstat -an|grep LISTEN|grep :8089`
         # 如果端口检查为空就重启8089服务
         if [ "$process2" == "" ];then
             fStart 8089
             echo "-----> 8089 Port started successfully <-----"
         else
             echo "-----> The 8089 port is running <-----"
         fi
         process3=`netstat -an|grep LISTEN|grep :8090`
         # 如果端口检查为空就重启8090服务
         if [ "$process3" == "" ];then
             fStart 8090
             echo "-----> 8090 Port started successfully <-----"
         else
             echo "-----> The 8090 port is running <-----"
         fi
     fi
}
# nohup也可新创一个函数
 fStart()
 {
     pid=`lsof -F p  -i:$1 | cut -b 2-`
     if [ "$pid" != "" ];then
         kill -9 $pid;
         nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=$1  &
         echo "-----> $1 Port occupancy forced offline and start again <-----"
     else
         nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=$1  &
         echo "-----> The $1 port starting success <-----"
     fi
 }
fStop()
 {
     pid=`lsof -F p  -i:$1 | cut -b 2-`
     if [ "$pid" != "" ];then
         kill -9 $pid;
         echo "-----> $1 Port Stop success <-----"
     else
         echo "-----> The $1 port Has been discontinued <-----"
     fi
 }
case "$1" in
      start)
         # 如果$1等于空,这种情况下大多是服务器重启
         if [ "$2" == "" ];then
             initialize
             echo "-----> Restart through boss Ben,Verification is recommended. <-----"
         else
             # 判断2是否目录为空
             if [ ! -d "$2" ];then
                 echo "-----> The specified file directory does not exist <-----"
             else
                 cd $2
                 readFile=`cat $PRO_URL`
                 if [ "$2" != "$readFile" ];then
                     echo "" > $PRO_URL
                     echo "$2" > $PRO_URL
                 fi
                 if [ "$3" == "" ];then
                     #nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=8088  &
                     #nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=8089  &
                     #nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=8090  &
                     fStart 8088
                     fStart 8089
                     fStart 8090
                 else
                     fStart $3
                 fi
             fi
         fi
      ;;
      stop)
         # 停止不需要传路径 2就代表待停端口
         if [ "$2" == "" ];then
             # 这儿:当start启动没有成功执行完时,执行stop会失败。
             # 8088 8089 8090端口全部停止
             fStop 8088
             fStop 8089
             fStop 8090
         else
             # 指定性端口停止
             fStop $2
         fi
         #process=`netstat -an|grep LISTEN|grep :8088`
         #process = `lsof -i:8088`
         #if [ "$process" != "" ];then
         #    echo "JAR8088 is running"
         #else
         #    echo "JAR8088 is not running"
         #fi
      ;;
     *)
         # 如果$1等于空,这种情况下大多是服务器重启
         #if [ "$1" == "" ];then
         #    initialize
         #fi
         echo " ---> service py_start [start|stop] [start:project path] [8088|8089|8090] <---"
      ;;
esac
===========================END===============================
* 注:
1. 需优化,当start刚执行就执行stop再执行start会出问题。
2. 第二个参数是版本控制jar的指定文件夹路径








