Как автоматически перезапустить Tomcat7 при перезагрузке системы?

26

Я установил Tomcat 7 на Ubuntu 12.04 LTS, которая работает на экземпляре Amzon EC2. Теперь я хочу, чтобы 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. Является ли предложенная процедура правильной?
Гаурав Агарвал
источник

Ответы:

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 уже содержит множество сценариев, куда я должен добавить предложенный вами сценарий.
Гаурав Агарвал
Сценарии инициализации в /etc/init.d могут зависеть друг от друга, например, в этом случае: сценарий tomcat7 не будет запущен до запуска сетевых сценариев. Не могли бы вы найти в Google термины «уровни запуска» и «сетевой интерфейс»? Я с радостью помогу с другими вещами, но не так уж и с обычными поисками в Google. И по поводу другого вопроса: мой скрипт предназначен для замены /etc/init.d/tomcat7.
Марцин Камински
В /etc/init.d/tomcat7моей системе похож на файл здесь gist.github.com/942150 . Должен ли я удалить все содержимое из файла и вставить свой сценарий или вставить его в каком-то месте уже написанного сценария.
Гаурав Агарвал
Я не видел сценарий, на который вы только что ссылались. Это выглядит вменяемым и похоже, что заменяет сценарии запуска / выключения, которые поставляются с Tomcat. Моя версия просто использует их. Вы проверили эти сценарии и подтвердили, что они работают? Если это так, вы можете пойти дальше и использовать мой сценарий. Используйте то, что вам нравится, важно понять, что делает скрипт, когда вы его вставляете.
Марцин Камински
1
Я сомневаюсь, что приведенный выше сценарий оболочки может вызвать такую ​​ошибку. Пожалуйста, сначала выполните поиск и устранение неисправностей.
Марцин Камински
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
SUBZ
источник
Приведенный выше сценарий оболочки проверяет, запущен ли tomacat или нет, если он запущен, завершить процесс. Если tomcat не запущен, он снова запустится и добавит этот сценарий в качестве сценария запуска
SUBZ
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, и было бы неплохо узнать, почему вы не должны этого делать.
Edenshaw
0

apache tomcat не поставляет ни один скрипт инициализации вместе с ним.

  1. Установите предварительно упакованную версию, поддерживаемую Ubuntu, из менеджера пакетов Ubuntu. Эта версия содержит собственный скрипт инициализации.

  2. Следуйте инструкциям в блоге, на который вы ссылались, и который предоставляет вам сценарий инициализации кикстарта.

Яссин Элассад
источник