Quelles sont les étapes pour dépanner et résoudre ce problème selon le titre?
Lorsque j'essaie de l'exécuter manuellement, j'obtiens une page immédiatement et le message d'erreur «Tentative de réexécution de cron alors qu'il est déjà en cours d'exécution».
drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
Réponses:
Le sémaphore cron est probablement verrouillé. Vous pouvez essayer d'appeler drupal_cron_cleanup () de n'importe où dans votre code (qui ne se trouve pas être invoqué par cron) et cela devrait déverrouiller votre variable de sémaphore cron.
Si vous avez configuré le drush dans Drupal 6, vous pouvez également essayer:
la source
cache_bootstrap
.drupal_cron_cleanup()
ne semble pas être mis à jour.Sommaire
Le message d'erreur que vous voyez se produirait si les deux conditions suivantes sont remplies:
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:
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.
la source
La
cron_semaphore
variable existait dans Drupal 6, mais vous utilisez Drupal 7, donc les verrous de sémaphore ont été déplacés dans une table distincte appeléesemaphore
.La solution pour déverrouiller le sémaphore cron serait donc:
Drupal 7
Drupal 6
la source
drush sql-query "DELETE FROM semaphore WHERE name='cron'"
Vous pouvez déboguer le cron en utilisant le module Cron Debug .
la source
Voici comment j'ai résolu le problème cron:
name = cron
la source
Pour Drupal 8: drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
la source
Sur Drupal 7, comme encore une autre option,
Via
drush cron
j'obtenais,C'était sur l'environnement de développement et s'est produit parce qu'un cron précédent était en cours d'exécution et a été interrompu.
Sur
includes/common.inc
, à la ligne 5413 ou autour, vous trouverez ce bloc, https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413Modifiez le
if
avec un&& FALSE
,Et relancez cron. Cela lui permettra de fonctionner.
Veuillez ne pas déployer cela et revenir en arrière une fois terminé. Il aide également au débogage.
la source
Je me suis heurté à cela plusieurs fois. Dans Drupal 6 Si vous n'utilisez pas drush, vous pouvez le corriger comme ceci:
1 Supprimez les variables cron_% de la table des variables.
2 Vider le cache Drupal dans: / admin / settings / performance
en appuyant sur le bouton "Effacer les données en cache" en bas de la page.
3 exécutez cron depuis le panneau d'administration / admin / reports / status / run-cron ne l'exécutez pas depuis la ligne de commande car cela peut causer des problèmes.
4 Vérifiez que la prochaine exécution automatique du cron se termine normalement.
la source
Vous pouvez déboguer en utilisant xdebug, exécuter cron à partir de l'interface d'administration Admin> Configuration> système> cron.
la source