脚本内容

现在越来越多的程序都用docker容器来管理了,不过依旧有很多的程序,是直接在linux上使用jar方式管理的,那么编写一个易用的脚本来管理是必不可少的。

脚本示例:

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
#!/bin/bash

jar_path='/home/pro-mall/ex-pro.jar'

# JVM参数
JVM_OPTS="-Dspring.profiles.active=prod"
# JVM参数 debug模式
JVM_OPTS_DEBUG="-Dspring.profiles.active=prod -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=10000,suspend=n"

function start(){
PID=`ps -ef |grep java|grep $jar_path|grep -v grep|awk '{print $2}'`

if [ x"$PID" != x"" ]; then
echo -e "\033[0;31m 程序 $jar_path 正在运行中,请先停止! \033[0m"
else
if [[ ! -f "$jar_path" ]]; then
echo -e "\033[0;31m $jar_path 不存在,无法操作命令! \033[0m"
else
nohup java -jar $JVM_OPTS $jar_path > /dev/null 2>&1 &
echo -e "\033[0;34m 启动 $jar_path 成功!\033[0m"
fi
fi
}

function debug(){
PID=`ps -ef |grep java|grep $jar_path|grep -v grep|awk '{print $2}'`

if [ x"$PID" != x"" ]; then
echo -e "\033[0;31m 程序 $jar_path 正在运行中,请先停止! \033[0m"
else
if [[ ! -f "$jar_path" ]]; then
echo -e "\033[0;31m $jar_path 不存在,无法操作命令! \033[0m"
else
nohup java -jar $JVM_OPTS_DEBUG $jar_path > /dev/null 2>&1 &
echo -e "\033[0;34m Debug模式 启动 $jar_path 成功!端口:10000 \033[0m"
fi
fi
}

function stop(){
PID=`ps -ef |grep java|grep $jar_path|grep -v grep|awk '{print $2}'`

if [ x"$PID" != x"" ]; then
kill -9 $PID
echo -e "\033[0;34m $jar_path 已停止 \033[0m"
else
echo -e "\033[0;31m 程序 $jar_path 未启动,不能操作! \033[0m"
fi
}

function restart(){
stop
sleep 2
start
}

function status()
{
PID=`ps -ef |grep java|grep $jar_path|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo -e "\033[0;34m 程序 $jar_path 正在运行中 \033[0m"
PID_NUM=`ps -ef |grep java|grep $jar_path|grep -v grep|awk '{print $2}'`
echo -e "\033[0;34m 程序对应的PID: $PID_NUM \033[0m"
else
echo -e "\033[0;31m 程序 $jar_path 没有运行! \033[0m"
fi
}

function find_help(){
echo -e "\033[0;31m 请输入正确的操作命令! \033[0m"
echo -e "\033[0;34m 命令参数:{start|stop|restart|status|debug} \033[0m"
echo -e "\033[0;34m 用法: \033[0m"
echo -e "\033[0;34m start 启动应用程序 \033[0m"
echo -e "\033[0;34m stop 停止应用程序 \033[0m"
echo -e "\033[0;34m restart 重启应用程序 \033[0m"
echo -e "\033[0;34m status 查看应用程序运行状态和PID \033[0m"
echo -e "\033[0;34m debug Debug模式启动应用程序 \033[0m"
exit 1
}

if [ "$1" = "" ];then
find_help;
exit 1
fi

case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
debug)
debug;;
*)
find_help;;
esac

设置别名

通常情况,我们运行一个脚本,需要使用“sh + 脚本路径 + 参数”的方式,管理起来可能不太方便,所以我们一般会给他设置一个别名来管理。

语法:

1
alias <别名>=<sh脚本路径>

了解了alias命令的语法后,我们直接执行就好了吗?不是的,如果直接执行,那么在你关闭ssh终端后重新连接,命令就失效啦。
我们需要将这个命令追加到~/.bashrc文件中,才能保证命令不会失效。
我们来试试吧,示例:

1
2
3
4
5
chmod 777 /home/pro-mall/c.sh

echo "alias mall=/home/pro-mall/c.sh" >> ~/.bashrc

source ~/.bashrc

设置好别名后的使用方法,如:

1
2
3
4
mall start
mall stop
mall debug
...