Як автоматично перезапустити 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

Створіть скрипт init у /etc/init.d/tomcat7 із вмістом, як зазначено нижче (ваш сценарій теж повинен працювати, але я думаю, що цей більше відповідає стандартам).

Таким чином Tomcat запуститься лише після налаштування мережевих інтерфейсів.

Вміст сценарію Init:

#!/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 вже є багато сценарію, куди слід додати запропонований вами сценарій.
Гаурав Агарвал

Сценарії init під /etc/init.d можуть залежати один від одного, як, наприклад, у цьому випадку: сценарій tomcat7 не запускається до запуску мережевих сценаріїв. Чи можете ви шукати терміни "runlevels" та "network interface" в Google? Я радий допомогти з іншими речами, але не так з тривіальними речами в Googling для інших. А щодо іншого питання: мій сценарій призначений замінити /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

вище оболонки перевірка сценарію tomacat працює чи ні , якщо його ходу вбити процес .if кота не запущений він почне знову додати цей скрипт в якості запуску сценарію
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, і було б непогано дізнатися, чому ви не повинні цього робити.
Еденшо


0

apache tomcat не надсилає з ним жодного сценарію init.

  1. Встановіть попередньо розфасовану версію, що підтримується Ubuntu, з диспетчера пакетів Ubuntu. Ця версія постачає власний сценарій init.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.