Sommaire
Le message d'erreur que vous voyez se produirait si les deux conditions suivantes sont remplies:
- Vos tâches cron ne se terminent pas (erreur) ou prennent plus de 4 minutes pour se terminer;
- Vous appelez cron plus souvent que toutes les 4 minutes (selon votre paramètre crontab, pas le paramètre dans Drupal)
Ce message d'erreur est donc le symptôme d'une tâche cron qui échoue ou prend trop de temps à s'exécuter. (Remarque: je me rends compte que vous avez déjà trouvé le coupable, mais je voulais ajouter une réponse pour les personnes qui trouvent cette page via les recherches, comme je l'ai fait)
Contexte
La première chose à comprendre est de savoir comment les tâches cron Drupal sont exécutées. Le cron Drupal est invoqué à intervalles réguliers - soit via un travail cron sur votre serveur, soit après chaque chargement de page si vous utilisez le cron du pauvre qui est le défaut de Drupal.
Cependant, les tâches cron ne sont pas nécessairement exécutées à chaque appel de cron - il existe un paramètre dans Drupal (la valeur par défaut est de 3 heures) qui indique à quelle fréquence les tâches cron doivent être exécutées. Mais ce délai de 3 heures ne s'applique que si les tâches cron se sont terminées avec succès.
Dans Drupal 7, cron utilise les mécanismes de verrouillage de Drupal , qui fournit un système de verrouillage coopératif et consultatif. L'une des caractéristiques de ce système de verrouillage est que les verrous expirent après un certain temps. Dans le cas de cron, il expire après 4 minutes - donc si votre cron est invoqué toutes les 3 minutes et que le travail cron précédent n'était pas terminé à ce moment-là (soit il s'est écrasé, soit était très lent), vous obtiendriez en effet ce message d'erreur .
Le fait que vous définissiez le cron sur 12 heures ne fait aucune différence - parce que la tâche cron de Drupal échoue / prend trop de temps, Drupal suppose qu'elle n'a pas été exécutée et essaie de l'exécuter à nouveau dès que cron est invoqué. Le délai de douze heures ne s'applique qu'aux cycles cron réussis.
La variable sémaphore cron n'existe plus dans Drupal 7 - c'était pour une ancienne version de Drupal. Dans Drupal 7, il n'y a aucun moyen fiable de libérer manuellement un verrou, car le backend de verrouillage peut changer - cependant, si vous utilisez le mécanisme de verrouillage principal, vous pouvez libérer les verrous cron en modifiant la base de données:
DELETE FROM semaphore WHERE name = 'cron';
Mais en faisant cela, vous ne répareriez que les symptômes - le problème qui doit être résolu est la raison pour laquelle cron échoue / prend si longtemps à s'exécuter.