Controlando o tomcat com o supervisor

12

Existe uma maneira de "graciosamente" desligar o tomcat ao controlar via supervisor?

Meu entendimento é que o script shutdown.sh do Tomcat fala com o tomcat na porta de desligamento para iniciar um desligamento normal. O supervisor não parece ter uma maneira de especificar um "comando" de desligamento, usando apenas sinais.

Alguém já usou com sucesso o supervisor com o tomcat?

Além disso, como o script startup.sh do tomcat inicia o processo java, copiei o comando java resultante diretamente para o supervisor, mas isso não é tão bom quanto usar o script startup.sh por causa de toda a configuração do ambiente. Existe uma maneira de fazer com que o supervisor use o script startup.sh, mas ainda rastreie o processo java filho resultante?

    
por Mark 07.09.2012 / 01:11

3 respostas

6

Obrigado ao Mark pelo link para esse script; aqui está o meu exemplo de trabalho para o CentOS:

#!/bin/bash
# Source: https://confluence.atlassian.com/plugins/viewsource/viewpagesrc.action?pageId=252348917
function shutdown()
{
    date
    echo "Shutting down Tomcat"
    unset CATALINA_PID # Necessary in some cases
    unset LD_LIBRARY_PATH # Necessary in some cases
    unset JAVA_OPTS # Necessary in some cases

    $TOMCAT_HOME/bin/catalina.sh stop
}

date
echo "Starting Tomcat"
export CATALINA_PID=/tmp/$$
export JAVA_HOME=/usr/local/java
export LD_LIBRARY_PATH=/usr/local/apr/lib
export JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.password.file=/etc/tomcat.jmx.pwd -Dcom.sun.management.jmxremote.access.file=/etc/tomcat.jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Xms128m -Xmx3072m -XX:MaxPermSize=256m"

# Uncomment to increase Tomcat's maximum heap allocation
# export JAVA_OPTS=-Xmx512M $JAVA_OPTS

. $TOMCAT_HOME/bin/catalina.sh start

# Allow any signal which would kill a process to stop Tomcat
trap shutdown HUP INT QUIT ABRT KILL ALRM TERM TSTP

echo "Waiting for 'cat $CATALINA_PID'"
wait 'cat $CATALINA_PID'

E aqui está o que eu usei em /etc/supervisord.conf:

[program:tomcat]
directory=/usr/local/tomcat
command=/usr/local/tomcat/bin/supervisord_wrapper.sh
stdout_logfile=syslog
stderr_logfile=syslog
user=apache

Em execução, parece assim:

[[email protected]:~]# supervisorctl start tomcat
tomcat: started
[[email protected]:~]# supervisorctl status
tomcat                           RUNNING    pid 9611, uptime 0:00:03
[[email protected]:~]# ps -ef|grep t[o]mcat
apache    9611  9581  0 13:09 ?        00:00:00 /bin/bash /usr/local/tomcat/bin/supervisord_wrapper.sh start
apache    9623  9611 99 13:09 ?        00:00:10 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.password.file=/etc/tomcat.jmx.pwd -Dcom.sun.management.jmxremote.access.file=/etc/tomcat.jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Xms128m -Xmx3072m -XX:MaxPermSize=256m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

Eu tentei inicialmente adicionar essas variáveis de ambiente no /etc/supervisord.conf através da diretiva environment , mas tive problemas com o JAVA_OPTS, com todos os espaços e sinais de igual. Colocá-lo no script wrapper cuidou disso.

Espero que isso ajude a salvar alguém em algum momento!

    
por 24.06.2013 / 22:22
20

Existe um comando "run" no catalina.sh. Funciona perfeitamente bem com o supervisor:

[program:tomcat]
command=/path/to/tomcat/bin/catalina.sh run
process_name=%(program_name)s
startsecs=5
stopsignal=INT
user=tomcat
redirect_stderr=true
stdout_logfile=/var/log/tomcat.log

A execução do tomcat como "catalina.sh run" funciona em primeiro plano, tem o pid correto e aceita sinais. Funciona perfeitamente bem com o supervisord.

    
por 03.02.2015 / 12:47
0

Supervisor doesn't seem to have a way to specify a shutdown "command", only using signals.

Você tentou usar stopsignal=QUIT ?

[program:tomcat]
command=java ...
process_name=tomcat
priority=150
startsecs=10
directory=./
stopsignal=QUIT
stdout_logfile=./logs/tomcat.log
stderr_logfile=./logs/tomcat.err
    
por 07.09.2012 / 05:54