Como reiniciar automaticamente o Tomcat7 na reinicialização do sistema?


26

Instalei o Tomcat 7 no Ubuntu 12.04 LTS, que é executado em uma instância do Amzon EC2. Agora, desejo que o tomcat seja reiniciado automaticamente na reinicialização do sistema.

Eu li este blog que sugere adicionar o script abaixo 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

e emita os seguintes comandos:

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

Minhas perguntas

  1. O tomcat7 já possui um script, onde devemos colar o script sugerido?
  2. O procedimento sugerido está correto?

Respostas:


51

Crie o script init em /etc/init.d/tomcat7 com o conteúdo conforme abaixo (seu script também deve funcionar, mas acho que este adere mais de perto aos padrões).

Dessa forma, o Tomcat será iniciado somente após a configuração das interfaces de rede.

Conteúdo do script de inicialização:

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

Altere suas permissões e adicione os links simbólicos corretos automaticamente:

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

E a partir de agora, ele será iniciado e desligado automaticamente ao inserir os níveis de execução apropriados. Você também pode controlá-lo comservice tomcat7 <stop|start|restart>


1
Obrigado. Eu sou novo no Ubuntu. Qual é o significado quando você diz "o Tomcat será iniciado somente após a configuração das interfaces de rede". Qual é o significado de "interfaces de rede?" Qual é o significado de "ao entrar no nível de execução apropriado"? e o arquivo tomcat7 já possui muitos scripts, onde devo adicionar o script sugerido por você.
Gaurav Agarwal

Os scripts init em /etc/init.d podem depender um do outro, como neste caso: o script tomcat7 não será executado antes que os scripts de rede sejam executados. Você poderia consultar os termos 'runlevels' e 'network interface' no Google? Fico feliz em ajudar com outras coisas, mas não tanto com coisas triviais do Google para outros. E sobre a outra pergunta: meu script pretende substituir o /etc/init.d/tomcat7.
Marcin Kaminski

O /etc/init.d/tomcat7no meu sistema é semelhante ao arquivo aqui gist.github.com/942150 . Devo remover todo o conteúdo do arquivo e colar seu script ou em algum lugar do script já escrito.
Gaurav Agarwal

Não vi o script que você acabou de referenciar. Parece sensato e parece que substitui os scripts de inicialização / desligamento que acompanham o Tomcat. Minha versão é apenas usá-los. Você testou esses scripts e confirmou que eles funcionam? Se assim for, você pode ir em frente e usar meu script. Use o que quiser, o importante é entender o que o script faz quando você o cola.
Marcin Kaminski

1
Duvido que o script de shell acima possa causar esse erro. Por favor, primeiro faça uma solução de problemas.
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

acima de verificação script shell para tomacat está funcionando ou não, se a sua execução matar o processo .se tomcat não está funcionando ele vai começar de novo adicionar este script como um script de inicialização
Subz

3

Não pode ser adicionado ao /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
Pelo menos a pessoa que lhe deu voto negativo, deve explicar o porquê. Nem todos sabemos tudo sobre Linux, e seria bom saber por que você não deve fazer isso.
Edenshaw


0

O apache tomcat não envia nenhum script de inicialização com ele.

  1. Instale a versão pré-empacotada mantida pelo Ubuntu a partir do gerenciador de pacotes Ubuntu, esta versão envia seu próprio script init.

  2. Siga as etapas no blog que você consultou para fornecer um script init do kickstart.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.