启动脚本有六个参数
依次是:启动命令、环境、App的Name、运行时端口、eureka的地址、对应的服务器外网地址
# 服务器外网地址,
有的服务器会有多个IP地址
,但是注册到eureka上面的实例一般都是使用的内网地址,
所以需要排除外网地址
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 服务器地址 $server
# 实例的名字
APP=$3
# 环境
ENV=$2
# 打包出来的jar包的名字,可以直接从外面传
APP_NAME=$APP-1.0.0-SNAPSHOT
# 运行时端口
PORT=$4
# eureka地址
EUREKA_HOST=$5
HEAP_MEMORY=512M
PERM_MEMORY=0M
DIRECT_MEMORY=64M
APP_HOME=`pwd`
# 组装启动时的JVM参数
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 "启动命令"
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 "启动完成,按CTRL+C退出日志界面即可>>>>>"
echo "---------------------------------"
sleep 5s
# 到日志文件夹中寻找最新的一个日志文件
LOG_FILE=`ls -t $LOG_PATH/*.log | head -1`
# 打印启动日志,如果发现日志中包含Tomcat started这个字符说明启动成功,结束打印进程
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 "执行成功"
else
echo "$APP_NAME is runing PID: $pid"
fi
}
checkpid(){
pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}
stop(){
# 停止前直接到对应的eureka服务中删除对应的实例,URL规则可以根据注册时的不同规则自行制定
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
网友评论