tomcat设置和mysql开机依赖_CentOS7 下Tomcat 添加依赖 MySQL 的开机启动服务

背景

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_151

CATALINA_HOME=/usr/lib/tomcat

export JAVA_HOME

export CATALINA_HOME

start_tomcat=$CATALINA_HOME/bin/startup.sh

stop_tomcat=$CATALINA_HOME/bin/shutdown.sh

start() {

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=MyTomcat

After=mysql.service

[Service]

Type=forking

# Disable service start and stop timeout logic of systemd for mysqld service.

TimeoutSec=0

ExecStart=/home/tomcat start

ExecStop=/home/tomcat stop

PrivateTmp=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 后,日志就是上述这样的顺序了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值