啟動(dòng)腳本有六個(gè)參數(shù)
依次是:?jiǎn)?dòng)命令坑夯、環(huán)境喂窟、App的Name、運(yùn)行時(shí)端口椒舵、eureka的地址蚂踊、對(duì)應(yīng)的服務(wù)器外網(wǎng)地址
# 服務(wù)器外網(wǎng)地址,
有的服務(wù)器會(huì)有多個(gè)IP地址
笔宿,但是注冊(cè)到eureka上面的實(shí)例一般都是使用的內(nèi)網(wǎng)地址,
所以需要排除外網(wǎng)地址
inpp=$6
server=`/sbin/ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addrs"|grep -v $inpp`
if [ -z "$server" ];then
server=$inpp
fi
echo 服務(wù)器地址 $server
# 實(shí)例的名字
APP=$3
# 環(huán)境
ENV=$2
# 打包出來(lái)的jar包的名字犁钟,可以直接從外面?zhèn)?APP_NAME=$APP-1.0.0-SNAPSHOT
# 運(yùn)行時(shí)端口
PORT=$4
# eureka地址
EUREKA_HOST=$5
HEAP_MEMORY=512M
PERM_MEMORY=0M
DIRECT_MEMORY=64M
APP_HOME=`pwd`
# 組裝啟動(dòng)時(shí)的JVM參數(shù)
JVM_OPTS="-server -XX:+HeapDumpOnOutOfMemoryError"
JVM_OPTS="${JVM_OPTS} -Xms${HEAP_MEMORY} -Xmx${HEAP_MEMORY} -XX:PermSize=${PERM_MEMORY} -XX:MaxPermSize=${PERM_MEMORY} "
JVM_OPTS="${JVM_OPTS} -XX:MaxDirectMemorySize=${DIRECT_MEMORY}"
JVM_OPTS="${JVM_OPTS} -XX:+AlwaysPreTouch"
JVM_OPTS="${JVM_OPTS} -Duser.dir=${APP_HOME} -Dapp.name=$APP_NAME"
SPRING_OPTS="--myhost=$EUREKA_HOST --spring.profiles.active=$ENV --server.port=$PORT"
JAR_FILE=$APP_NAME.jar
LOG_PATH=$APP_HOME/logs/log
start(){
checkpid
if [ ! -n "$pid" ]; then
echo "啟動(dòng)命令"
echo "nohup java -jar $JVM_OPTS $JAR_FILE $SPRING_OPTS >/dev/null 2>&1 &"
nohup java -jar $JVM_OPTS $JAR_FILE $SPRING_OPTS >/dev/null 2>&1 &
echo "---------------------------------"
echo "啟動(dòng)完成棱诱,按CTRL+C退出日志界面即可>>>>>"
echo "---------------------------------"
sleep 5s
# 到日志文件夾中尋找最新的一個(gè)日志文件
LOG_FILE=`ls -t $LOG_PATH/*.log | head -1`
# 打印啟動(dòng)日志,如果發(fā)現(xiàn)日志中包含Tomcat started這個(gè)字符說(shuō)明啟動(dòng)成功涝动,結(jié)束打印進(jìn)程
tail -f $LOG_FILE|while read line
do
kw=`echo $line|grep "Tomcat started"|wc -l`
if [ $kw -lt 1 ];then
echo $line
else
tail_pid=`ps -ef |grep $LOG_FILE |grep -v grep |awk '{print $2}'`
kill -9 $tail_pid
fi
done
echo "執(zhí)行成功"
else
echo "$APP_NAME is runing PID: $pid"
fi
}
checkpid(){
pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}
stop(){
# 停止前直接到對(duì)應(yīng)的eureka服務(wù)中刪除對(duì)應(yīng)的實(shí)例迈勋,URL規(guī)則可以根據(jù)注冊(cè)時(shí)的不同規(guī)則自行制定
curl -X "DELETE" "http://$EUREKA_HOST/eureka/apps/$APP/$server:$PORT"
checkpid
if [ ! -n "$pid" ]; then
echo "$APP_NAME not runing"
else
echo "$APP_NAME stop..."
kill $pid
sleep 2s
kill -9 $pid
fi
}
restart(){
stop
sleep 1s
start
}
status(){
checkpid
if [ ! -n "$pid" ]; then
echo "$APP_NAME not runing"
else
echo "$APP_NAME runing PID: $pid"
fi
}
case $1 in
start) start;;
stop) stop;;
restart) restart;;
status) status;;
*) echo "require start|stop|restart|status" ;;
esac