我们在通过jar启动项目时,有时候会比较多,启动会比较麻烦,需要编写shell脚本启动,vim start.sh (以下配置,只需要修改红色文字部分,其他地方不需要变动)
#! /bin/sh
端口号
PORTS=(9527 8004 8005 8001)
模块
MODULES=(process-gateway process-activiti process-auth process-system)
模块名称
MODULE_NAMES=(网关 流程配置中心 用户登录 数据管理)
jar包数组
JARS=(process-gateway-1.0.0-SNAPSHOT.jar process-activiti-0.0.1-SNAPSHOT.jar process-auth-1.0.0-SNAPSHOT.jar process-system-1.0.0-SNAPSHOT.jar)
jar包路径
JAR_PATH=‘/home/process_parent’
日志路径
LOG_PATH=‘/home/process_parent’
start() {
local MODULE=
local MODULE_NAME=
local JAR_NAME=
local command="
1
"
l
o
c
a
l
c
o
m
m
a
n
d
O
k
=
0
l
o
c
a
l
c
o
u
n
t
=
0
l
o
c
a
l
o
k
C
o
u
n
t
=
0
l
o
c
a
l
p
o
r
t
=
0
f
o
r
(
(
i
=
0
;
i
<
1" local commandOk=0 local count=0 local okCount=0 local port=0 for((i=0;i<
1"localcommandOk=0localcount=0localokCount=0localport=0for((i=0;i<{#MODULES[@]};i++))
do
MODULE=KaTeX parse error: Expected '}', got 'EOF' at end of input: {MODULES[i]}
MODULE_NAME=KaTeX parse error: Expected '}', got 'EOF' at end of input: {MODULE_NAMES[i]}
JAR_NAME=KaTeX parse error: Expected '}', got 'EOF' at end of input: {JARS[i]}
PORT=KaTeX parse error: Expected '}', got 'EOF' at end of input: {PORTS[i]}
if [ “
c
o
m
m
a
n
d
"
=
=
"
a
l
l
"
]
∣
∣
[
"
command" == "all" ] || [ "
command"=="all"]∣∣["command” == “$MODULE” ];then
commandOk=1
count=0
PID=ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'
if [ -n “
P
I
D
"
]
;
t
h
e
n
e
c
h
o
"
PID" ];then echo "
PID"];thenecho"MODULE—
M
O
D
U
L
E
N
A
M
E
:
已经运行
,
P
I
D
=
MODULE_NAME:已经运行,PID=
MODULENAME:已经运行,PID=PID”
else
exec nohup java -Xms256m -Xmx512m -jar
J
A
R
P
A
T
H
/
JAR_PATH/
JARPATH/JAR_NAME >>
L
O
G
P
A
T
H
/
LOG_PATH/
LOGPATH/MODULE.log 2>&1 &
PID=ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'
while [ -z "
P
I
D
"
]
d
o
i
f
(
(
PID" ] do if ((
PID"]doif((count == 30));then
echo “
M
O
D
U
L
E
−
−
−
MODULE---
MODULE−−−MODULE_NAME:$(expr KaTeX parse error: Undefined control sequence: \* at position 7: count \̲*̲ 10)秒内未启动,请检查!"…((
c
o
u
n
t
+
1
)
)
e
c
h
o
"
count+1)) echo "
count+1))echo"MODULE_NAME启动中…”
sleep 10s
PID=ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'
done
okCount=
(
(
((
((okCount+1))
echo "
M
O
D
U
L
E
−
−
−
MODULE---
MODULE−−−MODULE_NAME:已经启动成功,PID=
P
I
D
"
f
i
f
i
d
o
n
e
i
f
(
(
PID" fi fi done if((
PID"fifidoneif((commandOk == 0));then
echo “第二个参数输入错误”
else
echo “…本次共启动:$okCount个服务…”
fi
}
stop() {
local MODULE=
local MODULE_NAME=
local JAR_NAME=
local command=“
1
"
l
o
c
a
l
c
o
m
m
a
n
d
O
k
=
0
l
o
c
a
l
o
k
C
o
u
n
t
=
0
f
o
r
(
(
i
=
0
;
i
<
1" local commandOk=0 local okCount=0 for((i=0;i<
1"localcommandOk=0localokCount=0for((i=0;i<{#MODULES[@]};i++))
do
MODULE=KaTeX parse error: Expected '}', got 'EOF' at end of input: {MODULES[i]}
MODULE_NAME=KaTeX parse error: Expected '}', got 'EOF' at end of input: {MODULE_NAMES[i]}
JAR_NAME=KaTeX parse error: Expected '}', got 'EOF' at end of input: {JARS[i]}
if [ “
c
o
m
m
a
n
d
"
=
"
a
l
l
"
]
∣
∣
[
"
command" = "all" ] || [ "
command"="all"]∣∣["command” = “$MODULE” ];then
commandOk=1
PID=ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'
if [ -n “
P
I
D
"
]
;
t
h
e
n
e
c
h
o
"
PID" ];then echo "
PID"];thenecho"MODULE—
M
O
D
U
L
E
N
A
M
E
:
准备结束
,
P
I
D
=
MODULE_NAME:准备结束,PID=
MODULENAME:准备结束,PID=PID”
kill -9 $PID
PID=ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'
while [ -n “$PID” ]
do
sleep 3s
PID=ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'
done
echo “
M
O
D
U
L
E
−
−
−
MODULE---
MODULE−−−MODULE_NAME:成功结束”
okCount=
(
(
((
((okCount+1))
else
echo “
M
O
D
U
L
E
−
−
−
MODULE---
MODULE−−−MODULE_NAME:未运行”
fi
fi
done
if ((
c
o
m
m
a
n
d
O
k
=
=
0
)
)
;
t
h
e
n
e
c
h
o
"
第二个参数输入错误
"
e
l
s
e
e
c
h
o
"
.
.
.
.
.
.
.
.
.
.
.
.
本次共停止
:
commandOk == 0));then echo "第二个参数输入错误" else echo "............本次共停止:
commandOk==0));thenecho"第二个参数输入错误"elseecho"............本次共停止:okCount个服务…”
fi
}
case “$1” in
start)
start “$2”
;;
stop)
stop “$2”
;;
restart)
stop “$2”
sleep 3s
start “$2”
;;
*)
echo “第一个参数请输入:start|stop|restart”
exit 1
;;
esac
编写成功后,修改文件的权限chmod +7 start.sh
操作的命令:
启动所有
./start.sh start all
停止所有
./start.sh stop all
重启所有
./start.sh restart all
启动某一个 这里的gateway与sh中的module中定义的一样即可
./start.sh restart gateway
如果启动报:bad interpreter:No such file or directory的错误
原因:
1).sh脚本在windows系统下编写的,所以可能有不可见字符,从上图错误提示来看,很有可能脚本文件是DOS格式的,即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A。
解决办法:
1)通过vim filename 或者vi filename 进入编辑,即我这是vim startup_heartbeat.sh
2)然后通过shift+:进入命令模式。接着通过命令set ff 或者 set fileformat 查看文件格式,即我这如下图:从中可以看到我这文件格式是dos
3)修改文件格式dos为unix。通过命令set ff=unix 或 set fileformat=unix修改,然后再执行set ff 或者 set fileformat,查看是否修改成功。即如下图所示:
4)启动命令,发现正常启动,至此完毕。