龙空技术网

CentOS7如何添加Tomcat开机启动服务,且保证正确

毕小宝 343

前言:

此刻咱们对“tomcat服务启动命令”大体比较关注,各位老铁们都需要了解一些“tomcat服务启动命令”的相关资讯。那么小编同时在网络上汇集了一些对于“tomcat服务启动命令””的相关知识,希望看官们能喜欢,小伙伴们快快来了解一下吧!

背景

Linux CentOS7 操作系统下,开机启动项的添加有两种方式:一种是传统的编辑脚本文件放置 /etc/init.d 目录下,使用 chkconfig 命令添加;另一种是编写服务文件,由 systemd 调用启动。

前面介绍的 MySQL 安装后的开机启动服务文件为 mysql.service,属于 systemd 方式添加的。

我们的 Java web 应用通常是依赖于 MySQL 数据库服务的,必须保证 MySQL 服务启动后再启动 Tomcat 容器。因此,使用 chkconfig 方式就可能出现 Tomcat 比 MySQL 服务先启动、导致 Tomcat 应用数据库连接异常的问题。

systemd 服务管理命令可以指定服务间的依赖关系,基于此,我们可以自定义tomcat.service 文件来实现 Tomcat开机启动。

第一步,编写启动脚本

准备 Tomcat 的开机启动 Shell 脚本,接收启动参数如 start、stop;它可以直接调用 tomcat 的 startup.sh完成的,也可以添加额外的流程,如 Web 环境初始化逻辑等,然后再调用 startup.sh。

这是一个比较常见的 Tomcat 开机启动服务脚本

#!/bin/bash JAVA_HOME=/usr/java/jdk1.8.0_151CATALINA_HOME=/usr/lib/tomcatexport JAVA_HOMEexport CATALINA_HOMEstart_tomcat=$CATALINA_HOME/bin/startup.shstop_tomcat=$CATALINA_HOME/bin/shutdown.shstart() {                                                                       echo -n "Starting tomcat: "         ${start_tomcat}         echo "Tomcat start ok."}stop() {         echo -n "Shutting down tomcat: "         ${stop_tomcat}         echo "Tomcat stop ok." }                                                case "$1" in   start)         start         ;;   stop)         stop         ;;   restart)         stop         sleep 10         start         ;;   *)  echo "Usage: $0 {start|stop|restart}" esac exit 0

touch /home/tomcat,vi 编辑并输入上述脚本内容,即完成了开机脚本的编写。本质就是一个 shell 脚本,转而调用真正的 Tomcat 的脚本。

第二步,编写服务文件

开机时,systemd 会读取 /etc/systemd/system 目录下以 .service 后缀的文件。

编写服务文件。

cd /etc/systemd/system touch tomcat.service

编写 tomcat.service 文件,内容如下

[Unit]Description=MyTomcatAfter=mysql.service[Service]Type=forking# Disable service start and stop timeout logic of systemd for mysqld service.TimeoutSec=0ExecStart=/home/tomcat startExecStop=/home/tomcat stopPrivateTmp=true[Install]WantedBy=multi-user.target

注意事项:

Unit 里面的 After 设置为 mysql.service ,是可以保证 MySQL 服务启动之后,才开始执行该服务脚本。TimeoutSec=0 标识让开机启动不处理 Tomcat 启动超时异常,保证 Tomcat 耗时过长时不会被系统 terminating。可以指定 PID File为 /run 目录的下某个文件,如 /run/mytomcat.pid 但是不应该用tomcat.pid,这里配置的是 Tomcat 开机启动服务的 PID 文件,真正的 Tomcat 进程也会有一个 tomcat.pid 的进程编号文件,必须避免冲突。ExecStart 和 ExecStop 是指定服务的启动脚本,如果没有第一步编写的 tomcat 脚本的话,可以直接用为 tomcat/bin/startup.sh 的。第三步,启动服务

tomcat.service 文件准备好之后,使用 systemctl enable tomcat.service 命令添加服务。

systemctl start/stop/status tomcat.service 启动、停止、状态查看。

此外 service 文件修改后,需要调用 systemctl daemon-reload命令重新加载。

启示录

首先,以这种方式添加 Tomcat 之后,使用 jps 命令查看 Java 进程时,是找不到 tomcat进程的,只能用 ps -ef|grep java 方式才能查到,这点与 chkconfig 方式不同。

其次,这种方式真正的 Tomcat 脚本启动后会在根目录下生成一个 tomcat.pid 的进程文件,而 chkconfig 方式却不会。

第三,chkconfig 方式添加开机启动时,如果启动脚本中想等待其他服务完成、而执行了sleep 命令的话,会出现超时中断启动问题。

Dec 6 19:17:21 localhost systemd: tomcat.service start operation timed out. Terminating.

Dec 6 19:17:21 localhost systemd: Failed to start SYSV: Starts and Stops the Tomcat daemon…

Dec 6 19:17:21 localhost systemd: Unit tomcat.service entered failed state.

Dec 6 19:17:21 localhost systemd: tomcat.service failed.

第四,Linux 的系统日志文件 /var/log/messages 里面记录系统开机启动的所有日志信息,一般服务启动操作都是有成对日志信息的,我们可以在这里检查服务启动的流程是否正确。

这是 MySQL 的日志信息:

Starting MySQL Server…

Started MySQL Server.

Starging MyTomcat…

Started MyTomcat

配置 MyTomcat 启动 Aftemysql.service 后,日志就是上述这样的顺序了。

标签: #tomcat服务启动命令