Como configurar o Tomcat como serviço no Linux?

Problema

Como configurar o Tomcat como serviço no Linux?


Solução/Procedimento

Para facilitar a utilização do Tomcat no Linux, é possível criar um script que reúne em um único arquivo as operações necessárias para utilização do mesmo (start, stop, restart e status). Além do script, também pode-se realizar algumas configurações para se utilizar como um serviço.

Esse artigo, será dividido em três partes: primeiro será exibido uma lista de comandos com ilustrações; em seguida, o código e a explicação do funcionamento do mesmo; e por último será demonstrado como a configuração do serviço é realizada utilizando a biblioteca "chkconfig".

 

1 - Comandos:

A - Listar comandos do script: "service tomcat"

 

B - Iniciar serviço do Tomcat: "service tomcat start"

  • Ao iniciar o serviço, é verificado se o mesmo já está em execução, para impedir que duas instâncias fiquem ativas.

 

C - Parar serviço do Tomcat: "service tomcat stop"

 

D - Reiniciar serviço Tomcat: "service tomcat restart"

 

E - Listar status do serviço: "service tomcat status"

  • Ativo:


  • Inativo:



2 - Análise de Código:

Agora que já têm uma visão do funcionamento do script, vamos analisá-lo melhor em código. Deve-se criar um arquivo chamado tomcat na pasta "bin" do Tomcat.

A - Variáveis do serviço

  • Código:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Tomcat Server basic start/shutdown script
# processname: tomcat

#JAVA_HOME=/opt/oobj/aplicativos/jre1.7.0_75
#export JAVA_HOME
	
#PATH=$PATH:$JAVA_HOME/bin
#export PATH
	
TOMCAT_HOME=/opt/oobj/aplicativos/tomcat/bin
START_TOMCAT=/opt/oobj/aplicativos/tomcat/bin/startup.sh
STOP_TOMCAT=/opt/oobj/aplicativos/tomcat/bin/shutdown.sh

 

No código acima, as variáveis são:

  1. JAVA_HOME e PATH: estão comentadas, pois o Tomcat já pega o Java do S.O. Caso queira utilizar um Java específico, basta remover o comentário (sharp: #) e informar o caminho da pasta do Java;
  2. TOMCAT_HOME: informar o caminho do Tomcat.
    1. As variáveis START_TOMCAT e STOP_TOMCAT também devem apontar para o mesmo caminho do Tomcat.

 

B - Procedimentos de inicialização: "start":

  • Código:
start() {
a=`ps -ef |grep java | grep -m 1 "$TOMCAT_HOME" | awk '{ print $15 }'`
if [ -n "$a" ]; then
echo -e " \033[1;32m Serviço ja em execucao \033[0m"
else
echo -n "Starting tomcat: "
cd $TOMCAT_HOME
${START_TOMCAT}
echo "done."
fi
}

 

Na variável "a" armazena a informação se o tomcat está ativo ou não. Trata-se de uma consulta pelo serviço, utilizando-se 2 filtros, um pelo "java" e outro pelo caminho de instalação do tomcat "$TOMCAT_HOME". Se houver instância do tomcat ativa, um valor será armazenado, caso contrário, a variável ficará vazia. Uma condição avalia se a variável "a" está vazia ou não, se estiver vazia, uma mensagem de que o serviço já está em execução é exibida na tela; caso contrário, o tomcat é iniciado.

 

C - Procedimentos de parada: "stop"

  • Código:
stop() {
echo -n "Shutting down tomcat: "
cd $TOMCAT_HOME
${STOP_TOMCAT}
a=`ps -ef |grep java | grep -m 1 "$TOMCAT_HOME" | awk '{ print $2 }'`
`kill -9 "$a"`
echo -e " \033[1;31m kill PID $a \033[0m"
}

 

O procedimento de parada chama o serviço de "shutdown" do Tomcat para parar o serviço. Visto que o serviço de "shutdown" do Tomcat em alguns momentos não responde, principalmente, quando se inicia e tenta parar no mesmo instante, foi incrementado um "kill" sobre o processo do Tomcat, para caso o "shutdown" falhe. Este procedimento consiste em capturar o PID "variável 'a' ", e executar um "kill" sobre o mesmo.

 

D - Procedimento para captura e exibição do status do serviço:

  • Código:
status(){
echo ""
echo -e "\033[1;50m STATUS SERVICO TOMCAT OOBJ: \033[0m"
echo ""
STATE=0
STATE=`ps -ef |grep java|grep tomcat|wc -l`
echo -e "Servico : \033[1;29m + TOMCAT + \033[0m"
if [ "$STATE" -ge "1" ] ; then
echo -e " + STATUS: \033[1;32m Rodando \033[0m"
else
echo -e " + STATUS: \033[1;31m Inativo \033[0m"
fi
echo ""
a=`ps -ef |grep java | grep -m 3 "$TOMCAT_HOME" | awk '{ print $2 }'`
echo -e " + PID: \033[1;31m $a \033[0m"
echo ""
}

 

Exibe-se a mensagem "STATUS SERVICO TOMCAT OOBJ", que pode ser modificada como desejar. A variável "STATE" recebe o valor "0" (zero), e faz uma busca pelo serviço. Se o serviço estiver ativo, recebe o valor "1" (um) e uma condicional verifica se o valor armazenado é 1, caso seja, exibe que o serviço está "rodando", caso seja 0, exibe a mensagem "inativo". Também foi incrementado a escrita do PID do tomcat junto com o status, com a visão de facilitar a identificação e monitoramento via "top".

 

E - Captura de comandos dos usuários e execução das ações:

  • Código:
#acoes executadas de acordo com parametros passados via console
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 10
start
;;
status)
status
;;
*)
echo "Usage: {start|stop|restart|status}"
esac

 

No final do script, há um "case" que captura o comando digitado, e seleciona a ação a ser executada.

  • start: chama o procedimento de inicialização;
  • stop: chama o procedimento de parada;
  • restart: chama o "stop", aguarda 10 segundos e chama o "start"
  • status: chama o procedimento de status
  • E caso não seja digitado um comando, é exibido o "usage" com as opções de uso do script.

  

F - Script completo:

#!/bin/bash
# chkconfig: 234 20 80
# description: Tomcat Server basic start/shutdown script
# processname: tomcat
#Caso utilize um java diferente do do SO, informar caminho aqui, e exportar a variavel
#JAVA_HOME = /opt/jre/
#export JAVA_HOME
#Define diretorio do tomcat e scripts de inicio e parada
TOMCAT_HOME=/opt/oobj/aplicativos/tomcat
START_TOMCAT=$TOMCAT_HOME/bin/startup.sh
STOP_TOMCAT=$TOMCAT_HOME/bin/shutdown.sh
start() {
a=`ps -ef |grep java | grep -m 1 "$TOMCAT_HOME" | awk '{ print $15 }'`
if [ -n "$a" ]; then
echo -e " \033[1;32m Serviço ja em execucao \033[0m"
else
echo -n "Starting tomcat: "
cd $TOMCAT_HOME
${START_TOMCAT}
echo "done."
fi
}
stop() {
echo -n "Shutting down tomcat: "
cd $TOMCAT_HOME
${STOP_TOMCAT}
a=`ps -ef |grep java | grep -m 1 "$TOMCAT_HOME" | awk '{ print $2 }'`
`kill -9 "$a"`
echo -e " \033[1;31m kill PID $a \033[0m"
}
status(){
echo ""
echo -e "\033[1;50m STATUS SERVIOS TOMCAT OOBJ: \033[0m"
echo ""
STATE=0
STATE=`ps -ef |grep java|grep tomcat|wc -l`
echo -e "Servico : \033[1;29m + TOMCAT + \033[0m"
if [ "$STATE" -ge "1" ] ; then
echo -e " + STATUS: \033[1;32m Rodando \033[0m"
else
echo -e " + STATUS: \033[1;31m Inativo \033[0m"
fi
echo ""
a=`ps -ef |grep java | grep -m 3 "$TOMCAT_HOME" | awk '{ print $2 }'`
echo -e " + PID: \033[1;31m $a \033[0m"

3 - Configuração do Script:

Por fim, para se configurar o script é utilizado o comando “chkconfig”. O procedimento é o seguinte:

1. Criar link simbólico (atalho) na pasta "/etc/init.d/" com o nome tomcat:

Comando: ln -s /opt/oobj/aplicativos/tomcat/bin/tomcat /etc/init.d/tomcat

Obs.: Onde "/opt/oobj/aplicativos/tomcat/bin/tomcat" é o caminho onde está o arquivo “tomcat”.

 

2. Configurar permissão e adicionar a configuração ao S.O.:

chmod 755 /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig --level 234 tomcat on

Pronto, feito isto o script já está configurado para ser utilizado como serviço no linux e com todos os comandos necessário para facilitar sua utilização.


Referência

Sem referências.

5 (1)
Avaliação do Artigo (1 Votos)
Avaliar esse artigo
Anexos
Não há anexos para este artigo.