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.
Artigos Relacionados RSS Feed
Não há artigos relacionados para este artigo.
Comentários
Nome
Email
Código de Segurança Security Code
Não há comentários para este artigo. Seja o primeiro a postar um comentário.