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?
Gaurav Agarwal
źródło

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>

Marcin Kamiński
źródło
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
SUBZ
źródło
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
penner
źródło
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.

Yassine Elassad
źródło