如何在系统重启时自动重启Tomcat7?


26

我已经在运行于Amzon EC2实例的Ubuntu 12.04 LTS上安装了Tomcat 7。现在,我希望tomcat应该在系统重新启动时自动重新启动。

我读了这个博客,建议在下面添加以下脚本/etc/init.d/tomcat7

# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

case $1 in
start)
sh /usr/share/tomcat7/bin/startup.sh
;;
stop) 
sh /usr/share/tomcat7/bin/shutdown.sh
;;
restart)
sh /usr/share/tomcat7/bin/shutdown.sh
sh /usr/share/tomcat7/bin/startup.sh
;;
esac 
exit 0

并发出以下命令:

sudo chmod 755 /etc/init.d/tomcat7

sudo ln -s /etc/init.d/tomcat7 /etc/rc1.d/K99tomcat

sudo ln -s /etc/init.d/tomcat7 /etc/rc2.d/S99tomcat

sudo /etc/init.d/tomcat7 restart

我的问题

  1. tomcat7已经在它的脚本,在这里我们必须粘贴提示脚本?
  2. 建议的程序是否正确?

Answers:


51

在/etc/init.d/tomcat7中创建初始化脚本,其内容如下所示(您的脚本也应该工作,但我认为该脚本更符合标准)。

这样,Tomcat仅在配置了网络接口后才能启动。

初始化脚本内容:

#!/bin/bash

### BEGIN INIT INFO
# Provides:        tomcat7
# Required-Start:  $network
# Required-Stop:   $network
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Start/Stop Tomcat server
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

start() {
 sh /usr/share/tomcat7/bin/startup.sh
}

stop() {
 sh /usr/share/tomcat7/bin/shutdown.sh
}

case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac

更改其权限并自动添加正确的符号链接:

chmod 755 /etc/init.d/tomcat7
update-rc.d tomcat7 defaults

从现在开始,它将在输入适当的运行级别时自动启动和关闭。您也可以使用service tomcat7 <stop|start|restart>


1
谢谢。我是Ubuntu新手。当您说“只有配置了网络接口后,Tomcat才会启动”是什么意思。“网络接口”是什么意思?“一旦进入适当的运行水平”是什么意思?并且文件tomcat7已经包含很多脚本,我应该在其中添加您建议的脚本。
Gaurav Agarwal

/etc/init.d下的init脚本可以相互依赖,例如在这种情况下:在运行网络脚本之前,tomcat7脚本不会运行。您能在Google上查找“运行级别”和“网络界面”字词吗?我很乐意为您提供其他帮助,但在为他人提供Google琐碎琐碎工作方面却提供了很多帮助。关于另一个问题:我的脚本旨在替换/etc/init.d/tomcat7。
Marcin Kaminski 2012年

/etc/init.d/tomcat7这里我的系统是类似于文件gist.github.com/942150。我应该从文件中删除所有内容并粘贴您的脚本,还是将其粘贴到已编写的脚本中的某个位置。
Gaurav Agarwal

我还没有看到您刚刚引用的脚本。它看起来很不错,看起来像替换了Tomcat附带的启动/关闭脚本。我的版本仅使用它们。您是否测试了这些脚本并确认它们可以工作?如果是这样,您可以继续使用我的脚本。使用任何您喜欢的东西,重要的是要了解脚本在粘贴时的作用。
Marcin Kaminski 2012年

1
我怀疑上面的shell脚本是否会导致这样的错误。请先进行一些故障排除。
Marcin Kaminski 2014年

3
#!/bin/bash
#
# Author : subz
# Copyright (c) 2k15
#
# Make kill the tomcat process
#
TOMCAT_HOME=/media/subin/works/Applications/apache-tomcat-7.0.57
SHUTDOWN_WAIT=5

tomcat_pid() {
  echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`
}

start() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ] 
  then
    echo "Tomcat is already running (pid: $pid)"
  else
    # Start tomcat
    echo "Starting tomcat"
    /bin/sh $TOMCAT_HOME/bin/startup.sh
  fi


  return 0
}

stop() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Stoping Tomcat"
    /bin/sh $TOMCAT_HOME/bin/shutdown.sh

    let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n -e "\nwaiting for processes to exit";
      sleep 1
      let count=$count+1;
    done

    if [ $count -gt $kwait ]; then
      echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds"
      kill -9 $pid
      echo  " \nprocess killed manually"
    fi
  else
    echo "Tomcat is not running"
  fi

  return 0
}
pid=$(tomcat_pid)

 if [ -n "$pid" ]
  then
    echo "Tomcat is running with pid: $pid"
    stop
  else
    echo "Tomcat is not running"
    start
  fi
exit 0

上面的shell脚本检查tomacat是否正在运行,如果它正在运行,则杀死进程。如果tomcat没有在运行,它将再次启动,将该脚本添加为启动脚本
SUBZ 2015年

3

不能将此添加到 /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sleep 10
/usr/share/tomcat7/bin/startup.sh

4
至少对您投反对票的人应该解释原因。我们还不完全了解Linux,因此很高兴了解为什么您不应该这样做。
伊甸肖


0

apache tomcat不附带任何初始化脚本。

  1. 从Ubuntu软件包管理器安装由Ubuntu维护的预打包版本,该版本附带了自己的初始化脚本。

  2. 请按照您所引用的博客中为您提供kickstart初始化脚本的步骤进行操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.