Jak automatycznie ponownie uruchomić Tomcat7 przy ponownym uruchomieniu systemu?


26

Zainstalowałem Tomcat 7 na Ubuntu 12.04 LTS, który działa na instancji Amzon EC2. Teraz chciałbym, aby tomcat automatycznie uruchomił się ponownie przy ponownym uruchomieniu systemu.

Czytam tego bloga, który sugeruje dodanie poniższego skryptu do /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

i wydaj następujące polecenia:

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

Moje pytania

  1. Tomcat7 ma już w nim skrypt, gdzie mamy do wklejenia sugerowany scenariusz?
  2. Czy sugerowana procedura jest poprawna?

Odpowiedzi:


51

Utwórz skrypt init w /etc/init.d/tomcat7 z zawartością jak poniżej (twój skrypt też powinien działać, ale myślę, że ten jest bardziej zgodny ze standardami).

W ten sposób Tomcat uruchomi się dopiero po skonfigurowaniu interfejsów sieciowych.

Początkowa zawartość skryptu:

#!/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

Zmień uprawnienia i automatycznie dodaj poprawne dowiązania symboliczne:

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

Od tego momentu będzie on automatycznie uruchamiany i wyłączany po wejściu w odpowiednie poziomy uruchamiania. Możesz także kontrolować za pomocąservice tomcat7 <stop|start|restart>


1
Dzięki. Jestem nowy w Ubuntu. Jakie znaczenie ma wypowiedź „Ty Tomcat uruchomisz się dopiero po skonfigurowaniu interfejsów sieciowych”. Co oznacza „interfejsy sieciowe”? Co oznacza „po wejściu na odpowiedni poziom uruchamiania”? a plik tomcat7 zawiera już wiele skryptów, do których powinienem dodać sugerowany przez ciebie skrypt.
Gaurav Agarwal,

Skrypty inicjujące w katalogu /etc/init.d mogą być od siebie zależne, na przykład w tym przypadku: skrypt tomcat7 nie zostanie uruchomiony przed uruchomieniem skryptów sieciowych. Czy możesz wyszukiwać hasła „poziomy pracy” i „interfejs sieciowy” w Google? Z przyjemnością pomagam w innych rzeczach, ale nie tak bardzo w trywialnych rzeczach Googling dla innych. I drugie pytanie: mój skrypt ma zastąpić /etc/init.d/tomcat7.
Marcin Kamiński

W /etc/init.d/tomcat7moim systemie jest podobny do pliku tutaj gist.github.com/942150 . Czy powinienem usunąć całą zawartość z pliku i wkleić skrypt lub wkleić go w jakimś miejscu już napisanego skryptu.
Gaurav Agarwal,

Nie widziałem skryptu, o którym właśnie wspomniałeś. Wygląda rozsądnie i wygląda na to, że zastępuje skrypty uruchamiania / zamykania, które są dostarczane z Tomcat. Moja wersja tylko ich używa. Czy przetestowałeś te skrypty i potwierdziłeś, że działają? Jeśli tak, możesz użyć mojego skryptu. Używaj, co chcesz, ważne jest, aby zrozumieć, co robi skrypt po wklejeniu.
Marcin Kamiński,

1
Wątpię, aby powyższy skrypt powłoki mógł kiedykolwiek spowodować taki błąd. Najpierw rozwiąż kilka problemów.
Marcin Kamiński

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

powyżej sprawdzanie skryptu powłoki dla tomacat jest uruchomione lub nie, jeśli jest uruchomione, zabij proces. jeśli tomcat nie jest uruchomiony, uruchomi się ponownie dodaj ten skrypt jako skrypt startowy
SUBZ

3

Nie można tego dodać do /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
Przynajmniej osoba, która cię przegłosowała, powinna wyjaśnić dlaczego. Wszyscy nie wiemy wszystkiego o Linuksie i byłoby miło dowiedzieć się, dlaczego nie powinieneś tego robić.
Edenshaw,


0

apache tomcat nie dostarcza wraz z nim żadnego skryptu inicjującego.

  1. Zainstaluj wersję paczkowaną obsługiwaną przez Ubuntu z menedżera pakietów Ubuntu, ta wersja dostarcza własny skrypt startowy.

  2. Postępuj zgodnie z instrukcjami na blogu, do którego się odwoływałeś, i który zapewnia skrypt inicjujący kickstart.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.