Mantenimiento diario de Alfresco

Una vez instalado Alfresco, sea el método que sea el que se ha usado para su instalación (bundle, instalador, instalación separada de servidor de aplicaciones más producto, etc.), es necesario realizar una serie de tareas de mantenimiento diarias para no encontrarnos posteriormente con desagradables sorpresas.

El problema más común en este sentido es que se llene alguna de las particiones o discos que se están usando por parte de Alfresco para almacenar ficheros temporales, documentos borrados o logs.

Para ello, se pueden crear una serie de tareas y scripts para tener un mantenimiento automatizado. En mi caso uso un mantenimiento que termina borrando definitivamente ficheros, en otras situaciones es preferible realizar copias antes de estos borrados.

Lo primero que hay que hacer es tener bien colocado el fichero de logs de Alfresco,  para esto, copiamos el fichero log4j.properties como custom-log4j.properties dentro del extension. Por ejemplo:

cp /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties /opt/alfresco/tomcat/shared/classes/alfresco/extension/custom-log4j.properties

Y seguidamente ponemos el directorio correcto donde se almacenarán los logs. En este caso el siguiente valor:

Fichero: custom-log4j.properties

[…]
log4j.appender.File.File=/opt/alfresco/tomcat/logs/alfresco.log
[…]

Ahora los ficheros de logs propios de Alfresco se crearán dentro del directorio apropiado.

Seguidamente, aunque Alfresco ya realiza una rotación de estos logs por fechas, se puede crear un pequeño script para comprimir los ficheros de logs que han sido rotados:

Fichero: cron_gzip_logs.sh

#!/bin/bash
. `dirname “$0″`/config
for i in `ls ${CATALINA_HOME}/logs/alfresco.log.*[!.gz] 2>/dev/null`
do
        gzip $i
done

Además, podemos borrar los ficheros de logs aunque ya hayan sido rotados y comprimidos pero que tengan un número de días y por tanto ya no nos interesen. Para ello he creado el siguiente script:

Fichero: cron_del_logs.sh

#!/bin/bash

. `dirname “$0″`/config
find ${CATALINA_HOME}/logs/alfresco.log.*.gz -mtime +${AFTER_DAYS} -delete 2>/dev/null

También necesitamos borrar ficheros temporales que hayan sido creados hace días y no se hayan eliminado:

Fichero: cron_del_temp.sh

#!/bin/bash
. `dirname “$0″`/config
find ${CATALINA_HOME}/temp -mtime +${AFTER_DAYS_TEMP} -delete 2>/dev/null

En Alfresco, los ficheros/documentos que ya no están en la papelera y han pasado más de 14 días son movidos a un directorio generalmente llamado contentstore.deleted. Este directorio no es borrado nunca por Alfresco por lo que si se realizan muchas modificaciones de documentos y borrados puede llenarse y ocupar mucho espacio. Para solucionar esto he creado el siguiente script:

Fichero: cron_del_deleted.sh
#!/bin/bash
. `dirname “$0″`/config
find ${CONTENTSTORE_DELETED}/* -mtime +${AFTER_DAYS_DELETED} -delete 2>/dev/null

Ahora solo queda crear el fichero de configuración donde se asignan los valores a las variables usadas:

Fichero: config

CATALINA_HOME=/opt/alfresco/tomcat
AFTER_DAYS=30
AFTER_DAYS_DELETED=5
AFTER_DAYS_TEMP=5
CONTENTSTORE_DELETED=/opt/alfresco/alf_data/contentstore.deleted

Y el fichero maestro que llamará a todos los scripts (al que he llamado adt.sh en alusión a Alfresco Daily Tasks) y que servirá para ponerlo en el cron diario:

Fichero: adt.sh
#!/bin/bash
#
# @Author: Fernando Gonzalez
# @Version: 1.0
# @Fecha: 2011
#
UTILS_DIR=/opt/alfresco/utils
${UTILS_DIR}/cron_gzip_logs.sh
${UTILS_DIR}/cron_del_logs.sh
${UTILS_DIR}/cron_del_temp.sh
${UTILS_DIR}/cron_del_deleted.sh

Y hacer el enlace simbólico dentro del directorio /etc/cron.daily o crearlo en la “crontab”:

cd /etc/cron.daily

ln -s /opt/alfresco/utils/adt.sh .

Esto es simplemente un ejemplo de las tareas que hay que hacer después de la instalación de Alfresco para el mantenimiento diario y así evitar problemas futuros.

Otras consideraciones: Dentro de este mantenimiento, recien instalado Alfresco y si estamos ante un sistema en cluster, recomiendo la lectura del siguiente artículo escrito por Toni de la Fuente sobre el sistema de “jobs” de Alfresco: http://blyx.com/2011/07/01/alfresco-scheduled-jobs-tareas-automaticas-de-mantenimiento/

Actualización (23/08/2011).

En el uso de OpenOffice.org, los ficheros temporales se crean por lo general en el directorio temporal del sistema operativo, en la mayor parte de los casos cuando se trata de Linux es en /tmp. El script para borrar los ficheros temporales del usuario que ejecuta Alfresco sería:

Fichero: cron_del_tmp.sh
#!/bin/bash
. `dirname “$0″`/config
find ${TMP}/ -mtime +${AFTER_DAYS_TMP} -uid $UID -delete 2>/dev/null

Hay que añadir al fichero config las dos líneas de variables usadas:
Fichero: config
[…]
AFTER_DAYS_TMP=5
TMP=/tmp

Y también la ejecución del nuevo script al fichero adt.sh:
[…]
${UTILS_DIR}/cron_del_tmp.sh

Es MUY IMPORTANTE que Alfresco siempre sea ejecutado por un usuario no root ya que de lo contrario si ocurre algún problema en el borrado de ficheros podría desestabilizarse e incluso romperse el sistema.

One reply

  1. Mikel dice:

    Muy bueno fegor!!
    Los amantes de bash siempre nos congratulamos de solucionar nuestros problemas diarios con 4 comandos y un poco de imaginación.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *