Script de reinicio de tomcat y cron para reinicios nocturnos

Tue Feb 09 17:30:41 CET 2016       Sergio Raposo       Administración, Otras

Es bastante habitual ver como nuestro Tomcat cuando pasa bastante tiempo arrancado pide ser reiniciado a gritos, ya sea porque empieza a ir muy lento, o directamente porque deja de funcionar porque se ha quedado sin memoria (java.lang.OutOfMemoryError: PermGen space). Una solución bastante recurrente es crear un cron que una vez al día o a la semana, reinice el proceso para así liberar toda la memoria que por algún motivo el GC (Recolector de basura o Garbage Collection) no es capaz de liberar.

El primer paso será crear un script de reinicio, para ello creamos un fichero en algun lugar de nuestro sistema: restart-tomcat.sh:

#!/bin/sh

#Configuramos segun las rutas donde esten instalado nuestro java y nuestro tomcat
JAVA_HOME=/usr/lib/java/jdk1.8.0_65/
export JAVA_HOME  
PATH=$JAVA_HOME/bin:$PATH  
export PATH  
CATALINA_HOME=/usr/lib/tomcat7/
startScript=$CATALINA_HOME/bin/startup.sh

echo "Buscamos el id del proceso tomcat . . ."
#Cambiar tomcat7 por el nombre de vuestro proceso
tomcatPID=$(ps -ef | grep tomcat7 | grep -v grep | grep -v restart | awk '{print $2}')

if [ "$tomcatPID" == "" ]
then
    echo "Tomcat no se está ejecutando . . ."
else
    echo "Paramos el tomcat -> $tomcatPID . . ."
    kill -9 $tomcatPID
    #sh $CATALINA_HOME/bin/shutdown.sh
    echo "Esperamos que el proceso $tomcatPID finalice . . ."
    while ps -ef | grep -v grep | grep tomcat7 > /dev/null; do sleep 1; done
    echo "Tomcat parado correctamente"
fi

echo "Borramos los logs de tomcat"
rm -rf $CATALINA_HOME/logs/*
#find $CATALINA_HOME/logs/ -ctime +180 -daystart -exec ls "{}" \;

echo "Levantamos tomcat $startScript . . ."
#nohup $startScript &
$startScript

echo "Proceso completado . . ."

Una vez creado el fichero, debemos darle permisos de ejecución: sudo chmod 777 restart-tomcat.sh

Antes de seguir, es el momento de probar que nuestro script funciona, para ello solo tenemos que ejecutar y comprobar como nuestro tomcat se para y arranca sin problema.

Una vez probado, creamos nuestro cron, para ello usamos el comando: sudo crontab -e, seleccionamos el tipo de editor que queramos y añadimos una línea tal que:

0 8 * * * /usr/lib/restart-tomcat.sh

El significado de esa línea por orden es: minutos  hora  DíadelMes Mes DíaSemana ComandoAEjecutar

Por lo tanto, como vemos, en nuestro ejemplo estaremos ejecutando el reinicio de tomcat todos los días a las 8 de la mañana.

 Script, Cron, Reinicio, Tomcat