Cómo resolver problemas con el cron.php de Drupal

Otro apunte sobre Drupal. La ejecución del cron de Drupal puede fallar por diversas causas, y cuando el cron no se ejecuta, muchas tareas de mantenimiento, envío de boletines, notificaciones, sitemaps, etc. no funcionarán así que es un tema importante descubrir porqué puede fallar, especialmente si la ejecución directa con http://nombredelsitio/cron.php tampoco funciona.

Enlazo el post de drupal.org que explica algunas cosas que podemos hacer para averiguar porqué no funciona el cron de nuestro site, debugar la ejecución del cron si hace falta, y corregirlo para que no vuelva a fallar.

Me apunto las selects para limpiar las caches con SQL directamente desde la base de datos:

delete from cache_block;
delete from cache_content;
delete from cache_filter;
delete from cache_form;
delete from cache_menu;
delete from cache_mollom;
delete from cache_page;
delete from cache_update;
delete from cache_views;
delete from cache_views_data;

Selects para comprobar si para Drupal el estado del Cron es 'aún en ejecución':

select * from variable where name like 'cron%';

Y si hay variables que comienzan por cron, eliminarlas para desbloquearlo:

delete from variable where name like 'cron%';

Tampoco debería haber ningún registro en la tabla semaphore:

select * from semaphore;
delete from semaphore;

Si el cron falla porque un contenido a indexar para el buscador interno de Drupal tiene algo raro que lo hace petar, el contenido estará pendiente de indexar, y con esta select se puede averiguar qué nodos de Drupal aún no se han indexado en el buscador interno:

SELECT *
FROM node n
LEFT JOIN search_dataset d
       ON d.type = 'node'AND d.sid = n.nid
WHERE n.status = 1 AND n.type IN ('blog', 'page') 
      AND (d.sid IS NULL OR d.reindex > 0)

 

Si todo esto falla, toca revisar módulo por módulo hasta dar con el que provoca el error que hace petar el cron. La propuesta es ir desactivando uno por uno los que utilizan el Cron hasta dar con el culpable y encontrar el error.

Para saber qué módulos utilizan el cron, ordenados por orden de ejecución, se puede utilizar este código php creando, por ejemplo, una página de Drupal con el código como contenido, seleccionando tipo de formato php, y llamándola desde el navegador, o simplemente darle al botón de vista previa en lugar de guardar, para no dejar páginas guardadas con código php incrustado:

<?php
   echo theme('item_list', module_implements('cron'));
?>

 

Up
0