0%

SpringCloud启动脚本

SpringCloud启动脚本

启动脚本有六个参数
依次是:启动命令、环境、App的Name、运行时端口、eureka的地址、对应的服务器外网地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# 服务器外网地址,
有的服务器会有多个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