在之前的博文中已经对CentOS7下利用init.d目录下创建开机启动服务脚本,实现tomcat开机启动的介绍。但作为CentOS7来说,通过init.d建立启动脚本的机制已经不被推荐,推荐的方式是利用systemd机制实现开机启动,下面就该方式进行介绍。
1. 环境准备
1.1 系统
操作系统:CentOS 7(64位)
1.2 工具/软件
已安装JDK,并配置好环境变量
已安装tomcat,可手动启动,安装路径:/usr/local/tomcat/
2. 方法/步骤
2.1 JDK环境配置
CentOS7默认安装了OpenJDK,用于支持Tomcat启动是没有问题的。如果项目需要使用Sun的JDK特性的话,就需要重新配置Sun的JDK环境。这里可以参照本人之前的博文:《17101501_CentOS7下卸载openJDK安装Sun公司的JDK》。
2.2 创建Tomcat启动参数setenv.sh文件
catalina.sh在执行的时候会调用同级路径下的setenv.sh来设置额外的环境变量,因此需要在/usr/local /tomcat/bin路径下创建setenv.sh文件。
执行脚本:
[zm@zm-centos7 ~]$ su # 切换至root用户
密码:
[root@zm-centos7 zm]# vim /usr/local/tomcat/bin/setenv.sh # 创建setenv.sh脚本
[root@zm-centos7 zm]# cat /usr/local/tomcat/bin/setenv.sh # 查看setenv.sh脚本内容
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_BASE=/usr/local/tomcat
#设置Tomcat的PID文件
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
#添加JVM选项
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
2.3 编写tomcat.service文件
在/usr/lib/systemd/system路径下添加tomcat.service文件。
注意:文件中目录路径必须是绝对路径
执行脚本:
[root@zm-centos7 zm]# vim /usr/lib/systemd/system/tomcat.service #创建tomcat.service服务脚本
[root@zm-centos7 zm]# cat /usr/lib/systemd/system/tomcat.service #查看tomcat.service服务脚本
[Unit]
Description=Tomcat8
After=syslog.target network.target remote-fs.target nss-lookup.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
[Install]
WantedBy=multi-user.target
[unit]配置了服务的描述,规定了在network启动之后执行,
[service]配置服务的pid,服务的启动,停止,重启
[install]配置了使用用户
2.4 测试Tomcat.service服务
执行脚本:
[root@zm-centos7 zm]# systemctl enable tomcat # 设置开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service. # 自动创建软连接
[root@zm-centos7 zm]# systemctl start tomcat # 启动tomcat服务
[root@zm-centos7 zm]# systemctl status tomcat # 查看tomcat服务状态
● tomcat.service - Tomcat8
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor prese t: disabled)
Active: active (running) since 一 2017-10-23 15:25:27 CST; 7s ago
Process: 6666 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status= 0/SUCCESS)
Main PID: 6692 (java)
CGroup: /system.slice/tomcat.service
└─6692 /usr/bin/java -Djava.util.logging.config.file=/usr/local/to...
10月 23 15:25:27 zm-centos7 systemd[1]: Starting Tomcat8...
10月 23 15:25:27 zm-centos7 startup.sh[6666]: Tomcat started.
10月 23 15:25:27 zm-centos7 systemd[1]: Started Tomcat8.
[root@zm-centos7 zm]# systemctl stop tomcat # 停止tomcat服务
[root@zm-centos7 zm]# systemctl status tomcat # 查看tomcat服务状态
● tomcat.service - Tomcat8
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor prese t: disabled)
Active: failed (Result: exit-code) since 一 2017-10-23 15:25:48 CST; 2s ago
Process: 6799 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCE SS)
Process: 6666 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status= 0/SUCCESS)
Main PID: 6692 (code=exited, status=143)
10月 23 15:25:27 zm-centos7 systemd[1]: Starting Tomcat8...
10月 23 15:25:27 zm-centos7 startup.sh[6666]: Tomcat started.
10月 23 15:25:27 zm-centos7 systemd[1]: Started Tomcat8.
10月 23 15:25:48 zm-centos7 systemd[1]: Stopping Tomcat8...
10月 23 15:25:48 zm-centos7 systemd[1]: tomcat.service: main process exited...a
10月 23 15:25:48 zm-centos7 systemd[1]: Stopped Tomcat8.
10月 23 15:25:48 zm-centos7 systemd[1]: Unit tomcat.service entered failed ....
10月 23 15:25:48 zm-centos7 systemd[1]: tomcat.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
因为配置pid,在启动的时候会再tomcat根目录生成tomcat.pid文件,停止之后删除。
同时tomcat在启动时候,执行start不会启动两个tomcat,保证始终只有一个tomcat服务在运行。
多个tomcat可以配置在多个目录下,互不影响。