Apache Tomcat para entornos de producción (II)

Si ayer hablábamos de cómo configurar Apache Tomcat con Apache Tomcat Native, hoy vamos a ver cómo lanzar el servidor como un servicio del sistema operativo. Esto implica dejar a un lado los scripts startup.sh, catalana.sh y shutdown.sh que se encuentran en $TOMCAT_HOME/bin. Para esto necesitaremos Commons Daemon Native que podemos encontrar en los binarios de Apache Tomcat. La versión que necesitamos se encuentra en $TOMCAT_HOME/bin/commons-daemon-native.tar.gz y corresponde con la 1.0.5. La instalación es muy sencilla:

  1. Descomprimir commons-daemon-native.tar.gz
  2. Entrar en el directorio unix que encontraremos
  3. Ejecutamos:
    ./configure --with-java=/usr/local/java
    make
  4. Encontraremos que se ha generado un binario llamado jsvc
  5. Copiamos este ejecutable a $TOMCAT_HOME/bin
  6. Creamos el usuario y grupo tomcat que necesitaremos para la configuración. El UID tendremos que elegirlo según nuestro S.O.:
    useradd -b /opt/tomcat -u 105 -s /bin/false tomcat
  7. Ahora conviene que revisemos el propietario de los directorios y archivos que tenemos en $TOMCAT_HOME, principalmente conf, log, webapp, temp y work. Si algo no está bien, lo veremos claramente en los logs.

La parte interesante corresponde con la configuración. Lo mejor para explicarlo es hacerlo sobre el archivo que usamos en Clinker Virtual Appliance. A continuación el contenido del script tomcat6.sh que colocaremos en /etc/init.d:

#!/bin/sh

. /lib/lsb/init-functions

JAVA_HOME=/usr/local/java

CATALINA_HOME=/opt/tomcat
DAEMON_HOME=/opt/tomcat/bin
TOMCAT_USER=tomcat
TMP_DIR=/opt/tomcat/temp
PID_FILE=/var/run/jsvc.pid
CATALINA_BASE=/opt/tomcat
CATALINA_OPTS="-Djava.library.path=/usr/local/lib/tomcat-native -Xms256m -Xmx512m -XX:MaxPermSize=256m"

CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar

case "$1" in
  start)
    log_daemon_msg "Starting Apache Tomcat launched with commons-daemon (jsvc)" "jsvc"
    log_end_msg 0
    $DAEMON_HOME/jsvc \
    -jvm server \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    -showversion \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;

  stop)
    log_daemon_msg "Stopping Apache Tomcat" "jsvc"
    log_end_msg 0
    $DAEMON_HOME/jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;

  *)
    echo "Usage tomcat6 start/stop"
    exit 1;;
esac

Como podéis comprobar, este script es el candidato perfecto para localizar variables de entorno y cualquier otra cosa que necesitemos inicializar antes de lanzar Apache Tomcat. Por lo tanto, la variable LD_LIBRARY_PATH que necesitamos en la entrada anterior, podemos definirla aquí. Los parámetros de configuración relacionados con la memoria se controlan desde la variable local CATALINA_OPTS. Observaremos que únicamente se crea un archivo de log en $TOMCAT_HOME/logs, para recuperar los otros archivos tendremos que proporcionar la configuración de logging. En el arranque de Apache Tomcat debemos encontrar algo similar a esto:

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
commons daemon version "1.0.5"
commons daemon process (id: 3882, parent: 3881)
20-abr-2011 13:02:14 org.apache.catalina.core.AprLifecycleListener init
INFO: Cargada la biblioteca nativa APR de Apache Tomcat 1.1.20
20-abr-2011 13:02:14 org.apache.catalina.core.AprLifecycleListener init
INFO: Capacidades APR: IPv6 [true], enviar fichero [true], aceptar filtros [false], aleatorio [true].
20-abr-2011 13:02:14 org.apache.coyote.http11.Http11AprProtocol init
INFO: Inicializando Coyote HTTP/1.1 en puerto http-8080
20-abr-2011 13:02:14 org.apache.coyote.ajp.AjpAprProtocol init
INFO: Inicializando Coyote AJP/1.3 en ajp-8009
20-abr-2011 13:02:14 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 889 ms
20-abr-2011 13:02:14 org.apache.catalina.core.StandardService start
INFO: Arrancando servicio Catalina
20-abr-2011 13:02:14 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
20-abr-2011 13:02:14 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Desplieque del descriptor de configuración host-manager.xml
20-abr-2011 13:02:14 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Desplieque del descriptor de configuración manager.xml
20-abr-2011 13:02:15 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Despliegue del directorio docs de la aplicación web
20-abr-2011 13:02:15 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Despliegue del directorio ROOT de la aplicación web
20-abr-2011 13:02:15 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Despliegue del directorio examples de la aplicación web
20-abr-2011 13:02:15 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
20-abr-2011 13:02:15 org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
20-abr-2011 13:02:15 org.apache.coyote.http11.Http11AprProtocol start
INFO: Arrancando Coyote HTTP/1.1 en puerto http-8080
20-abr-2011 13:02:15 org.apache.coyote.ajp.AjpAprProtocol start
INFO: Arrancando Coyote AJP/1.3 en ajp-8009
20-abr-2011 13:02:15 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1084 ms

Para cualquier consulta, no dudéis en dejar un mensaje e intentaré atender como mejor sepa y pueda.

4 thoughts on “Apache Tomcat para entornos de producción (II)

  1. Me paena esta consulta pero la vdd, soy novata en el uso de debian y no se como ejecutar el tomcat6.sh, me marca indica el siguiente error

    root@test:~# /etc/init.d/tomcat6 start
    Starting Apache Tomcat launched with commons-daemon (jsvc): jsvc.
    Invalid user name ‘tomcat’ specified

    le suprimi el sh para ver si con eso lo podia ejecutar.
    agradezco de antemano tu ayuda

    Saludos!!!

  2. Hola Renata:

    Si observas el script y el mensaje de error que te da al ejecutarlo, necesitas crear un usuario y grupo tomcat. Precisamente, esta forma de lanzar Apache Tomcat permite que puedas hacerlo sin necesidad de ser root. Algo muy conveniente por temas de seguridad.

    Un saludo

Leave a Reply

Your email address will not be published. Required fields are marked *