Tomcat添加开机启动服务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wojiushiwo945you/article/details/78751285

背景

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

MySQL安装后的开机启动服务文件为mysql.service,就是systemd方式添加的,如果我们的Java web应用依赖与MySQL数据库服务的启动的话,使用chkconfig方式就可能出现tomcat比MySQL服务先启动的问题。

systemd命令可以指定服务直接的启动和依赖关系,基于此,我们可以编写tomcat.service文件来实现tomcat开机启动。

编写启动脚本

首先,需要准备tomcat的开机启动调用的脚本,本质就是一个shell脚本,接收启动参数如start、stop;间接调用tomcat的启动脚本startup.sh完成的。我们可以添加跟web应用相关的其他开机操作,如系统环境设置等。

#!/bin/bash 
JAVA_HOME=/usr/java/jdk1.8.0_60
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

注意事项:
1 Unit里面的After配置在mysql.service服务启动之后,才开始该服务
2TimeoutSec=0让开机启动不处理tomcat启动超时,保证tomcat耗时过长时不会被系统terminating。
3可以指定PIDFile为/run目录的下某个文件,如/run/mytomcat.pid但是不应该用tomcat.pid,我们这里配置的是tomcat开机启动服务的PID文件,真正的tomcat进程也会有一个tomcat.pid的进程编号文件,避免冲突。
4 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后,日志就是上述这样的顺序了。

猜你喜欢

转载自blog.csdn.net/wojiushiwo945you/article/details/78751285