#!/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的指定文件夹路径