Script de reinicio de tomcat y cron para reinicios nocturnos
09/02/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.