CentOS7 用 systemctl 配置 Tomcat 8.5.35
本文讲解使用在 CentOS 7 上配置 systemctl
脚本管理 tomcat 服务。
安装 java 环境
如果没有特殊需求,可以直接从源中安装 JDK。
[root@snails ~]# yum -y install java
[root@snails local]# java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
对于需要 jdk 开发工具进行操作的业务场景,可以采用从官方下载 jdk 的压缩包。
[root@snails ~]# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz" -O jdk-8u60-linux-x64.tar.gz
解压之后配置好环境变量就可以,这里不详细说了。
下载 tomcat 并解压
直接下载 tomcat,并压缩到指定一个安装目录中。
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz -P /usr/local
[root@snails local]# cd /usr/local/
[root@snails local]# tar -zxvf apache-tomcat-8.5.35.tar.gz
[root@snails local]# ln -s /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
[root@snails local]# rm -rvf apache-tomcat-8.5.35.tar.gz
已删除"apache-tomcat-8.5.35.tar.gz"
设置环境变量
配置好 JDK 和 tomcat 环境变量,这里用的 openjdk。
[root@snails local]# vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk
export CLASS_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$JAVA_HOME/bin:$CATLINA_HOME/bin
[root@snails ~]# source /etc/profile
centos7 使用 systemctl
替换了传统的 service
命令,systemctl
的一些用法:
[root@snails ~]# systemctl list-unit-files --type service #查看全部服务命令
[root@snails ~]# systemctl status name.service #查看服务命令
[root@snails ~]# systemctl start name.service #启动服务
[root@snails ~]# systemctl stop name.service #停止服务
[root@snails ~]# systemctl restart name.service #重启服务
[root@snails ~]# systemctl enable name.service #增加开机启动
[root@snails ~]# systemctl disable name.service #删除开机启动
name.service
就是服务名称,systemctl
的脚本一般为 服务名称 + .service
,在使用命令的时候 .service
可以省略。
配置 PID 和启动参数
tomcat 需要增加一个 pid 进程文件,在 tomcat/bin
目录下面,增加 setenv.sh
配置,catalina.sh
启动的时候会调用,同时配置 java 启动运行的内存参数。
[root@snails ~]# vi /usr/local/tomcat/bin/setenv.sh
# add tomcat pid
CATALINA_PID = "$CATALINA_HOME/tomcat.pid"
# add java opts
JAVA_OPTS="-server -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
创建 tomcat 用户并授权
如果使用 root
账户运行 tomcat,则可以忽略这一步。
[root@snails ~]# getent group tomcat || groupadd -r tomcat
[root@snails ~]# getent passwd tomcat || useradd -r -d /opt -s /bin/nologin -g tomcat tomcat
[root@snails ~]# chown -R tomcat:tomcat /usr/local/apache-tomcat-8.5.35
增加 tomcat.service
在 /usr/lib/systemd/system
目录下增加 tomcat.service
,目录必须是绝对目录。/usr/lib/systemd/system
目录中存放了很多服务的启动脚本,可以进去看一下。
[root@snails ~]# cd /usr/lib/systemd/system
[root@snails ~]# vim tomcat.service
[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/usr/local/tomcat/tomcat.pid
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
注意:如果使用 root
账户使用 tomcat,不是普通用户,那么请去掉 [Service]
下的 User
和 Group
项。
使用 tomcat.service
脚本配置好以后需要使用 systemctl enable
使脚本注册生效,然后就可以正常的使用 start
、status
、stop
、restart
的命令了。
[root@snails ~]# systemctl enable tomcat
[root@snails ~]# systemctl start tomcat
[root@snails ~]# ps aux |grep tomcat
tomcat 1304 34.8 2.8 3570504 102908 ? Sl 14:36 0:03 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
[root@snails system]# curl -I localhost:8080
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 10 Dec 2018 06:39:13 GMT
因为配置了 pid,在启动的时候会在 tomcat 根目录生成 tomcat.pid
进程文件,停止之后自动删除。同时 tomcat 在启动时候,执行 start
不会启动两个 tomcat,保证始终只有一个 tomcat 服务在运行。
配置多个 tomcat 服务
上面说了,因为配置了唯一标识的 tomcat.pid
进程文件,tomcat 只能启动一个实例。那么有时候,需要在一台主机上提供多个 tomcat
服务,该如何配置脚本呢?
如之前我们把 tomcat 安装到了 /usr/local/tomcat
中了,我们现在拷贝一份至 /usr/local/tomcatb
。
修改 tomcatb/conf/server.xml
中的端口,把配置文件中所有端口修改为其它服务未占用的端口,修改 tomcatb/setenv.sh
中 PID 文件路径:
#add tomcat pid
CATALINA_PID="/usr/local/tomcatb/tomcatb.pid"
tomcatb 服务启动后会在副本 /usr/local/tomcatb/
目录中生成 tomcatb.pid
进程文件。
然后进入 /usr/lib/systemd/system
目录拷贝刚刚配置好的 tomcat.service
脚本为 tomcatb.service
,修改内部的文件路径:
[Unit]
Description=TomcatB
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/usr/local/tomcatb/tomcatb.pid
ExecStart=/usr/local/tomcatb/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
注意事项和之前一样。
然后启用脚本:systemctl enable tomcatb
。
这样我们就完成了两个 tomcat 服务的配置,使用 systemctl [start | status | stop | restart] tomcat
管理第一个服务,使用 systemctl [start | status | stop | restart] tomcatb
管理第二个服务 tomcatb,两个 tomcat 服务互相独立不影响。