0%

在Linux下优雅地使用Tomcat部署多个WEB应用

在Linux下优雅地使用Tomcat部署多个WEB应用

目录

[TOC]

前言

最近在华为云中标麒麟 linux部署互政服务,其中多次使用了tomcat作为各个服务的容器,为了方便启停服务和升级tomcat版本,结合以往tomcat在运维平台上的运作经验,编写了在Linux下的tomcat启动脚本,脚本很简单,但非常实用。就把它命名为wi-tomcat.sh

wi-tomcat.sh作用

  1. 即创建tomcat配置副本,默认在工作路径下创建副本
  2. 更方便和优雅地启动停止服务、查看日志等
  3. 实际部署一个tomcat,对tomcat版本升级只需一步替换

干货

下面为脚本详细内容:

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
#!/bin/sh
#############################################
# #
# wisoft linux tomcat run shell #
# #
# v1.0 #
# #
# created by wisoft devops group #
# #
#############################################

export CATALINA_BASE="$PWD"
export CATALINA_PID=$CATALINA_BASE/logs/server.pid

#启动为适配tomcat目录做的准备
#拷贝tomcat必要的配置文件
if [ ! -d "$CATALINA_BASE"/conf ]; then
cp -r "$CATALINA_HOME"/conf "$CATALINA_BASE"/
fi

if [ ! -d "$CATALINA_BASE"/logs ]; then
mkdir logs
fi

if [ ! -d "$CATALINA_BASE"/temp ]; then
mkdir temp
fi

if [ ! -d "$CATALINA_BASE"/webapps ]; then
mkdir webapps
fi

start () {
$CATALINA_HOME/bin/startup.sh
}

stop () {
$CATALINA_HOME/bin/shutdown.sh
}

status () {
SERVER_PID=`cat $CATALINA_PID`
if [ ! -n "$SERVER_PID" ]; then
echo "服务不在运行"
else
echo "服务正在运行 pid $SERVER_PID"
fi
}

restart () {
SERVER_PID=`cat $CATALINA_PID`
if [ ! -n "$SERVER_PID" ]; then
echo $CATALINA_HOME/bin/startup.sh
else
$CATALINA_HOME/bin/shutdown.sh
sleep 3s
$CATALINA_HOME/bin/startup.sh
fi
}

case $1 in
start)
start
tail -f $CATALINA_BASE/logs/catalina.out
;;
stop)
stop
;;
status)
status
;;
restart)
restart
tail -f $CATALINA_BASE/logs/catalina.out
;;
console)
tail -f $CATALINA_BASE/logs/catalina.out
;;
*)
echo "使用帮助:$0 {start|stop|status|restart|console}."
echo "by wisoft"
;;
esac

将上述脚本内容存为linux脚本wi-tomcat.sh

演示

在linux服务器上解压tomcat的安装包,用户下设定环境变量CATALINA_HOME 为tomcat的解压路径,即视为tomcat安装完成:

1
2
[openlab@qwx366422-0002 ~]$ echo $CATALINA_HOME
/wisoft/tomcat/apache-tomcat-7.0.96

将脚本放置到你想部署服务的地方,例如/wisoft/servers/igov运行之:

1
2
3
4
5
6
7
8
9
10
11
[openlab@qwx366422 igov]$ ./wi-tomcat.sh 
使用帮助:./wi-tomcat.sh {start|stop|status|restart}.
by wisoft
[openlab@qwx366422 igov]$ ll
total 14
drwxr-xr-x 3 openlab openlab 174 Dec 12 13:48 conf
drwxrwxr-x 2 openlab openlab 4096 Dec 25 13:18 logs
drwxr-xr-x 2 openlab openlab 4096 Dec 25 14:42 temp
drwxr-xr-x 3 openlab openlab 38 Dec 19 10:51 webapps
-rwxrwxr-x 1 openlab openlab 1654 Dec 25 10:16 wi-tomcat.sh
drwxrwxr-x 3 openlab openlab 22 Dec 12 13:48 work

然后可以将服务装进webapps目录,通过conf/server.xml来指定服务路径,如需修改端口也可在此处修改。然后你就可以愉快地启动停止了。例如:

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
[openlab@qwx366422 igov]$ ./wi-tomcat.sh start
Using CATALINA_BASE: /wisoft/servers/igov
Using CATALINA_HOME: /wisoft/tomcat/apache-tomcat-7.0.96
Using CATALINA_TMPDIR: /wisoft/servers/igov/temp
Using JRE_HOME: /wisoft/java/jdk1.8.0_231
Using CLASSPATH: /wisoft/tomcat/apache-tomcat-7.0.96/bin/bootstrap.jar:/wisoft/tomcat/apache-tomcat-7.0.96/bin/tomcat-juli.jar
Using CATALINA_PID: /wisoft/servers/igov/logs/server.pid
Tomcat started.
[openlab@qwx366422 igov]$ ./wi-tomcat.sh status
服务正在运行 pid 28469
[openlab@qwx366422 igov]$ ./wi-tomcat.sh stop
Using CATALINA_BASE: /wisoft/servers/igov
Using CATALINA_HOME: /wisoft/tomcat/apache-tomcat-7.0.96
Using CATALINA_TMPDIR: /wisoft/servers/igov/temp
Using JRE_HOME: /wisoft/java/jdk1.8.0_231
Using CLASSPATH: /wisoft/tomcat/apache-tomcat-7.0.96/bin/bootstrap.jar:/wisoft/tomcat/apache-tomcat-7.0.96/bin/tomcat-juli.jar
Using CATALINA_PID: /wisoft/servers/igov/logs/server.pid
Tomcat stopped.
[openlab@qwx366422 igov]$ ll logs/
total 24
-rw-rw-r-- 1 openlab openlab 6338 Dec 12 13:52 catalina.2019-12-12.log
-rw-rw-r-- 1 openlab openlab 6338 Dec 12 13:52 catalina.out
-rw-rw-r-- 1 openlab openlab 0 Dec 12 13:48 host-manager.2019-12-12.log
-rw-rw-r-- 1 openlab openlab 829 Dec 12 13:52 localhost.2019-12-12.log
-rw-rw-r-- 1 openlab openlab 764 Dec 12 13:49 localhost_access_log.2019-12-12.txt
-rw-rw-r-- 1 openlab openlab 0 Dec 12 13:48 manager.2019-12-12.log
[openlab@qwx366422 igov]$ ./wi-tomcat.sh status
cat: /wisoft/servers/igov/logs/server.pid: No such file or directory
服务不在运行

进阶

使用./wi-tomcat.sh来操作还是有些不方便的地方,比如你得记得它的路径位置还有容易和其他服务运行命令混淆,下面我们可以通过 软连接 ln -s 命令来重命名脚本,并通过设置环境变量PATH路径指定命令位置。

例如:
设置定一个目录作为命令集位置:/wisoft/servers/bin

追加环境变量PATH : export PATH=$PATH:/wisoft/servers/bin

创建连接 ln -s /wisoft/servers/igov igov

1
2
3
4
5
6
[openlab@qwx366422 servers]$ ll bin
total 0
lrwxrwxrwx 1 openlab openlab 54 Dec 23 08:49 activemq -> /wisoft/servers/mq/apache-activemq-5.14.4/bin/activemq
lrwxrwxrwx 1 openlab openlab 32 Dec 12 15:44 ark -> /wisoft/servers/ark/wi-tomcat.sh
lrwxrwxrwx 1 openlab openlab 33 Dec 12 15:30 igov -> /wisoft/servers/igov/wi-tomcat.sh
lrwxrwxrwx 1 openlab openlab 33 Dec 20 16:05 solr -> /wisoft/servers/solr/wi-tomcat.sh

如上,我们就可以在任意位置操作服务了。 比如

1
2
3
4
5
6
7
8
9
10
[openlab@qwx366422 servers]$ igov status
服务正在运行 pid 11189
[openlab@qwx366422 servers]$ igov stop
Using CATALINA_BASE: /wisoft/servers/igov
Using CATALINA_HOME: /wisoft/tomcat/apache-tomcat-7.0.96
Using CATALINA_TMPDIR: /wisoft/servers/igov/temp
Using JRE_HOME: /wisoft/java/jdk1.8.0_231
Using CLASSPATH: /wisoft/tomcat/apache-tomcat-7.0.96/bin/bootstrap.jar:/wisoft/tomcat/apache-tomcat-7.0.96/bin/tomcat-juli.jar
Using CATALINA_PID: /wisoft/servers/igov/logs/server.pid
Tomcat stopped.

还可以把solr服务改成用tomcat启动。更是方便solr的启动停止了。

扩展

你可以对wi-tomcat.sh进行扩展,来达到你个性化维护目标。
比如:

可以给他添加 ./wi-tomcat.sh clean 方法 来删除一些临时文件或日志

可以给他添加 ./wi-tomcat.sh showlog 方法来查看日志

可以给他添加 ./wi-tomcat.sh backup 方法来迁移服务或备份服务

这些你也可以在添加在启动停止等方法前后,达到维护目的。

当然这些命令都需要在 wi-tomcat.sh 中自己去实现,但相信这绝对是一劳永逸的。