Impedir doble ejecución del cron de moodle

En las experiencias con Moodle me han sucedido ya varias cosas que contar, una de ellas es la ejecución del cron. En ambientes donde no se conoce bien la carga que va a tener el uso de Moodle se actua bajo la percepción de un mejor o peor caso, basado en lo cual se decide un tiempo entre ejecuciones del cron de Moodle, por ejemplo 20 minutos, lo que sucede es que en ambientes grandes 20 minutos muchas veces no resulta ser suficiente, para lo cual hay que buscar un mecanismo para evitar la doble ejecución del cron, ya que en algunas oportunidades la ejecución queda «tomada» o «pegada» y nunca termina o no termina correctamente.

Encontré en Preventing Duplicate Cron Jobs Execution la forma de hacerlo, pero incluyendo las lineas que llaman al cron de Moodle en una instalación que se asume está en /var/www/html/, adicionando ademas la posibilidad de guardar el log en la carpeta de logs de apache.

PIDFILE=/var/run/moodle_cron.pid
if [ -f $PIDFILE ]
then
  PID=$(cat $PIDFILE)
  ps -p $PID > /dev/null 2>&1
  if [ $? -eq 0 ]
  then
    echo "El proceso ya se esta ejecutando"
    exit 1
  else
    ## El proceso no se encuentra por lo que se asume que no se esta ejecutando
    echo $$ > $PIDFILE
    if [ $? -ne 0 ]
    then
      echo "No se puede crear el PID"
      exit 1
    else
      NOW=$(date +"%Y-%m-%d_%H-%M-%S")
      FILE=/var/log/httpd/moodle_cron.$NOW.log
      /usr/bin/php /var/www/html/admin/cli/cron.php > $FILE 
    fi
  fi
else
  echo $$ > $PIDFILE
  if [ $? -ne 0 ]
  then
    echo "No se puede crear el PID"
    exit 1
  fi
fi

rm $PIDFILE

Comments are closed.