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:
- 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;
- TOMCAT_HOME: informar o caminho do Tomcat.
- 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=<code>{{EJS34}}</code> 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=<code>{{EJS35}}</code> <code>{{EJS36}}</code> 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=<code>{{EJS37}}</code> 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=<code>{{EJS38}}</code> 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=<code>{{EJS39}}</code> 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=<code>{{EJS40}}</code> <code>{{EJS41}}</code> 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=<code>{{EJS42}}</code> 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=<code>{{EJS43}}</code> 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.