Come riavviare automaticamente Tomcat7 al riavvio del sistema?


26

Ho installato Tomcat 7 su Ubuntu 12.04 LTS che gira su un'istanza di Amzon EC2. Ora vorrei che Tomcat si riavviasse automaticamente al riavvio del sistema.

Ho letto questo blog che suggerisce di aggiungere lo script seguente a /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

ed emettere i seguenti comandi:

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

Le mie domande

  1. Il tomcat7 ha già scritto in esso, dove dobbiamo incollare lo script suggerito?
  2. La procedura suggerita è corretta?

Risposte:


51

Crea lo script di init in /etc/init.d/tomcat7 con i contenuti come sotto (anche il tuo script dovrebbe funzionare, ma penso che questo aderisca più da vicino agli standard).

In questo modo Tomcat verrà avviato solo dopo aver configurato le interfacce di rete.

Contenuto dello script 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

Modifica le sue autorizzazioni e aggiungi automaticamente i collegamenti simbolici corretti:

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

E d'ora in poi verrà automaticamente avviato e arrestato entrando nei runlevel appropriati. Puoi anche controllarlo conservice tomcat7 <stop|start|restart>


1
Grazie. Sono nuovo di Ubuntu. Qual è il significato quando dici "Tomcat si avvierà solo dopo aver configurato le interfacce di rete". Qual è il significato di "interfacce di rete?" Qual è il significato di "all'entrata nel livello di esecuzione appropriato"? e il file tomcat7 contiene già molti script in cui dovrei aggiungere lo script suggerito da te.
Gaurav Agarwal,

Gli script init in /etc/init.d possono dipendere l'uno dall'altro, come in questo caso: lo script tomcat7 non verrà eseguito prima dell'esecuzione degli script di rete. Potresti cercare i termini "runlevel" e "interfaccia di rete" su Google? Sono felice di aiutare con altre cose, ma non tanto con Google cose banali per gli altri. E sull'altra domanda: il mio script è destinato a sostituire /etc/init.d/tomcat7.
Marcin Kaminski,

Il /etc/init.d/tomcat7nel mio sistema è simile al file qui gist.github.com/942150 . Devo rimuovere tutto il contenuto dal file e incollare lo script o incollarlo in qualche punto dello script già scritto.
Gaurav Agarwal,

Non ho visto la sceneggiatura a cui hai appena fatto riferimento. Sembra sano e sembra che sostituisca gli script di avvio / arresto forniti con Tomcat. La mia versione li sta semplicemente usando. Hai testato quegli script e confermi che funzionano? In tal caso, puoi andare avanti e utilizzare la mia sceneggiatura. Usa quello che vuoi, l'importante è capire cosa fa lo script quando lo incolli.
Marcin Kaminski,

1
Dubito che lo script di shell sopra potrebbe mai causare un simile errore. Per favore, prima fai un po 'di risoluzione dei problemi.
Marcin Kaminski,

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

sopra lo script di shell controlla se tomacat è in esecuzione o meno se è in esecuzione, uccidi il processo. se tomcat non è in esecuzione, ricomincerà ad aggiungere questo script come script di avvio
SUBZ

3

Non è possibile aggiungerlo a /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
Almeno la persona che ti ha declassato, dovrebbe spiegare perché. Non tutti sappiamo tutto di Linux, e sarebbe bello sapere perché non dovresti farlo.
Edenshaw,


0

apache tomcat non distribuisce alcuno script init con esso.

  1. Installa la versione preconfezionata gestita da Ubuntu dal gestore dei pacchetti Ubuntu questa versione viene fornita con il proprio script init.

  2. Seguire i passaggi nel blog a cui si fa riferimento per fornire uno script di avvio kickstart.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.