java命令
wang 2021-07-21 java
# java命令
# 开启脚本
#!/bin/bash
########## 开启java服务 ############
# 检查是否提供了两个命令行参数
if [ $# -ne 2 ]; then
echo "需传两2个命令行参数, 1:端口,2:环境"
echo "用法样例: ./start.sh <9000> <test>"
exit 1
fi
##### 动态参数 #######
# 端口,从终端传过来的
PORT=$1
# 环境,从终端传过来的
PROFILES_ACTIVE=$2
##### 动态参数 #######
# 当前路径,默认会获取
BASE_PATH=''
# jar包名,默认会获取
JAR_NAME=''
# JVM 参数
JAVA_OPS="-Xms512m -Xmx512m"
# 主机地址和端口号
host="localhost" # 主机地址,默认本地
port=$PORT # 端口号从java传过来的
max_attempts=12 # 最大尝试次数,校验端口占用的
sleep_time=5 # 每次尝试之间的等待时间,校验端口占用的
# 获取当前shell脚本的绝对路径
function init_abs_path() {
BASE_PATH=$(dirname "$(realpath "$0")")
# 如果有系统不兼容上面命令,则可以切换这个
# BASE_PATH=$(dirname "$(readlink -f "$0")")
cd $BASE_PATH
echo "[auto_abs_path] 进入绝对路径: $BASE_PATH"
}
# 获取当前路径下的jar包
function init_jar_name() {
echo "[init_jar_name] 查询当前路径下的jar包"
# 获取当前路径下的jar包
jar_files=( $(find . -maxdepth 1 -name "*.jar" -type f) )
# 获取当前路径下的文件包
if [[ ${#jar_files[@]} -gt 0 ]]; then
for jar in "${jar_files[@]}"; do
JAR_NAME=$jar
done
echo "[init_jar_name] 已找到jar包:$JAR_NAME"
else
echo "[init_jar_name] 未找到jar包,请先上传jar包"
exit 1 # 未找到包,直接退出
fi
}
# 检查端口是否已被占用
function check_port() {
nc -z localhost "$port"
}
# 开启服务
function start() {
echo "[start] 检测端口 $port"
if check_port; then
echo "端口 $port 已被占用,无法启动服务"
return 1
fi
# 打印启动参数
echo "[start] 开始启动: $BASE_PATH/$JAR_NAME"
echo "[start] 启动参数: $JAVA_OPS"
echo "[start] 启动环境: $PROFILES_ACTIVE"
# 启动应用
nohup java $JAVA_OPS -Dspring.profiles.active=$PROFILES_ACTIVE -Dserver.port=$PORT -jar $BASE_PATH/$JAR_NAME > nohup.out 2>&1 &
echo "[start] 监听启动状态: $JAR_NAME"
for ((attempts=0; attempts<max_attempts; attempts++)); do
if check_port; then
echo "服务启动成功"
return 0
else
echo "等待服务启动中... (尝试 $((attempts+1))/$max_attempts)"
sleep "$sleep_time"
fi
done
echo "服务启动失败"
return 1
}
# 入口
function main() {
# 获取当前shell脚本的绝对路径
init_abs_path
# 获取当前路径下的jar名
init_jar_name
# 执行启动命令
start
}
main
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
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
# 停止脚本
#!/bin/bash
########## 停止java服务 ##########
# jar包名,默认会获取
JAR_NAME=''
# 获取当前shell脚本的绝对路径,并进入
function init_abs_path() {
BASE_PATH=$(dirname "$(realpath "$0")")
# 如果有系统不兼容上面命令,则可以切换这个
# BASE_PATH=$(dirname "$(readlink -f "$0")")
cd $BASE_PATH
echo "[auto_abs_path] 进入绝对路径: $BASE_PATH"
}
# 获取当前路径下的jar包
function init_jar_name() {
echo "[init_jar_name] 查询当前路径下的jar包"
# 获取当前路径下的jar包
jar_files=( $(find . -maxdepth 1 -name "*.jar" -type f) )
# 获取当前路径下的文件包
if [[ ${#jar_files[@]} -gt 0 ]]; then
for jar in "${jar_files[@]}"; do
JAR_NAME=$jar
done
echo "[init_jar_name] 已找到jar包:$JAR_NAME"
else
echo "[init_jar_name] 未找到jar包,请先上传jar包"
exit 1 # 未找到包,直接退出
fi
}
# 停止服务
function stop() {
echo "[stop] 开始关闭: $JAR_NAME"
PID=""
query(){
PID=`ps -ef |grep java|grep $JAR_NAME|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "[stop] 关闭中: $JAR_NAME (pid:$PID)"
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "[stop] 关闭成功: $JAR_NAME"
else
echo "[stop] 关闭失败,未启动: $JAR_NAME"
fi
}
# 入口
function main() {
# 获取当前shell脚本的绝对路径,并进入
init_abs_path
# 获取当前路径下的jar包
init_jar_name
# 执行停止命令
stop
}
main
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
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
# 环境变量
# 在profile文件添加环境变量
vi /etc/profile
# 复制这个
JAVA_HOME=/usr/local/java/jdk1.8.0_311
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8