/
run.sh
296 lines (165 loc) · 5.11 KB
/
run.sh
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
#!/bin/bash
#后端服务脚本
#Author: caoxile
###################################
#环境变量及程序执行参数
#需要根据实际环境以及Java程序名称来修改这些参数
#java虚拟机启动参数
JAVA_OPTS="-Xms1024M -Xmx2048M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump"
###################################
#(函数)判断程序是否已启动
#
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid ($1部分),及Java程序名称($2部分)
###################################
#初始化psid变量(全局)
psid=0
checkpid() {
javaps=`jps -l | grep spring-boot-ssm-1.0.jar`
if [ -n "$javaps" ]; then
psid=`echo $javaps | awk '{print $1}'`
else
psid=0
fi
}
###################################
#(函数)启动程序
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则提示程序已启动
#3. 如果程序没有被启动,则执行启动命令行
#4. 启动命令执行后,再次调用checkpid函数
#5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed]
#注意:echo -n 表示打印字符后,不换行
#注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法
###################################
start() {
checkpid
if [ $psid -ne 0 ]; then
echo "================================"
echo
echo "warn: spring-boot-ssm already started!"
echo
echo "================================"
else
echo "============================================================================="
echo "Starting spring-boot-ssm backend service ..."
JAVA_CMD1="nohup java -jar $JAVA_OPTS -Dspring.profiles.active=$env spring-boot-ssm-1.0.jar"
echo $JAVA_CMD1
$JAVA_CMD1 >/dev/null 2>&1 &
echo "============================================================================="
checkpid
if [ $psid -eq 0 ]; then
echo "[Failed]"
else
echo "(pid=$psid) [OK]"
fi
fi
}
###################################
#(函数)停止程序
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行
#3. 使用kill -9 pid命令进行强制杀死进程
#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?
#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]
#6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。
#注意:echo -n 表示打印字符后,不换行
#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值
###################################
stop() {
checkpid
if [ $psid -ne 0 ]; then
echo "=============================================="
if [ $psid -ne 0 ];then
echo "Stopping bsss backend service ... "
kill -9 $psid
fi
echo "=============================================="
checkpid
if [ $psid -eq 0 ]||[ $psid2 -eq 0 ]; then
echo "[OK]"
else
echo "[Failed]"
fi
else
echo "================================"
echo
echo "warn: itct backend service is not running"
echo
echo "================================"
fi
}
###################################
#(函数)检查程序运行状态
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid
#3. 否则,提示程序未运行
###################################
status() {
checkpid
if [ $psid -ne 0 ]; then
echo "================================================="
if [ $psid -ne 0 ];then
echo "itct backend service is running! (pid=$psid)"
fi
echo "================================================="
else
echo "================================"
echo " itct backend service is not running"
echo "================================"
fi
}
###################################
#(函数)更新,打包,重启
updateAndRestart() {
git pull
mvn -U clean install -DskipTests
stop
cp ./target/itct-1.0.jar itct-1.0.jar
start
}
###################################
###################################
#读取脚本的第一个参数($1),进行判断
#参数取值范围:{start|stop|restart|all|status}
#如参数不在指定范围之内,则打印帮助信息
###################################
env="$1"
if [ "$env" != "dev" ]&&[ "$env" != "prod" ]
then
echo "===================================================================="
echo
echo "Useage: $(basename $0) [dev|prod] [start|stop|restart|all|status]"
echo
echo "===================================================================="
exit
fi
case "$2" in
'start')
start ;;
'stop')
stop ;;
'restart')
stop
start ;;
'status')
status ;;
'all')
updateAndRestart;;
*)
echo "============================================="
echo
echo "Useage: $(basename $0) [dev|prod] [start|stop|restart|all|status]"
echo
echo "============================================="
exit 1
esac
exit 0