Welche Schritte sind erforderlich, um dieses Problem gemäß Titel zu beheben und zu beheben?
Wenn ich versuche, manuell auszuführen, erhalte ich sofort eine Seite und die Fehlermeldung "Es wird versucht, cron erneut auszuführen, während es bereits ausgeführt wird."
drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
Antworten:
Das Cron-Semaphor ist wahrscheinlich gesperrt. Sie können versuchen, drupal_cron_cleanup () von einer beliebigen Stelle in Ihrem Code aus aufzurufen ( der nicht von cron aufgerufen wird), und die Cron-Semaphorvariable sollte entsperrt werden.
Wenn Sie drush in Drupal 6 konfiguriert haben, können Sie auch versuchen:
quelle
cache_bootstrap
.drupal_cron_cleanup()
scheint jedoch nicht aktualisiert zu werden.Zusammenfassung
Die angezeigte Fehlermeldung würde auftreten, wenn die folgenden beiden Bedingungen erfüllt sind:
Diese Fehlermeldung ist daher ein Symptom für einen Cron-Task, dessen Ausführung entweder fehlschlägt oder zu lange dauert. (Hinweis: Mir ist klar, dass Sie den Täter bereits gefunden haben, aber ich wollte eine Antwort für Personen hinzufügen, die diese Seite wie ich über Suchanfragen finden.)
Hintergrund
Das Erste, was Sie verstehen müssen, ist, wie Drupal-Cron-Tasks ausgeführt werden. Der Drupal-Cron wird in regelmäßigen Abständen aufgerufen - entweder über einen Cron-Job auf Ihrem Server oder nach jedem Laden der Seite, wenn Sie den Cron des armen Mannes verwenden, der der Standard von Drupal ist.
Die Cron-Tasks werden jedoch nicht unbedingt jedes Mal ausgeführt, wenn Cron aufgerufen wird. In Drupal gibt es eine Einstellung (Standard: 3 Stunden), die angibt, wie oft Cron-Tasks ausgeführt werden sollen. Diese Verzögerung von 3 Stunden gilt jedoch nur, wenn die Cron-Aufgaben erfolgreich abgeschlossen wurden.
In Drupal 7 verwendet cron die Sperrmechanismen von Drupal , die ein kooperatives, beratendes Sperrsystem bieten. Eines der Merkmale dieses Schließsystems ist, dass Schlösser nach einer bestimmten Zeit ablaufen. Im Falle von Cron läuft es nach 4 Minuten ab. Wenn Ihr Cron also alle 3 Minuten aufgerufen wird und der vorherige Cron-Job zu diesem Zeitpunkt noch nicht beendet wurde (entweder abgestürzt oder sehr langsam), wird in der Tat diese Fehlermeldung angezeigt .
Die Tatsache, dass Sie den Cron auf alle 12 Stunden einstellen, spielt keine Rolle. Da der Drupal-Cron-Task fehlschlägt / zu lange dauert, geht Drupal davon aus, dass er nicht ausgeführt wurde, und versucht, ihn erneut auszuführen, sobald Cron aufgerufen wird. Die zwölfstündige Verspätung gilt nur für erfolgreiche Cron-Läufe.
Die Cron-Semaphor-Variable existiert in Drupal 7 nicht mehr - dies war für eine ältere Version von Drupal. In Drupal 7 gibt es keine zuverlässige Möglichkeit, eine Sperre manuell aufzuheben, da sich das Sperr-Backend möglicherweise ändert. Wenn Sie jedoch den Kernsperrmechanismus verwenden, können Sie Cron-Sperren aufheben, indem Sie die Datenbank bearbeiten:
Auf diese Weise können Sie jedoch nur die Symptome beheben. Das Problem, das behoben werden muss, besteht darin, warum Cron ausfällt bzw. so lange dauert.
quelle
Die
cron_semaphore
Variable war in Drupal 6 vorhanden, aber Sie verwenden Drupal 7, sodass die Semaphorsperren in eine separate Tabelle mit dem Namen verschoben wurdensemaphore
.Die Lösung zum Entsperren des Cron-Semaphors wäre:
Drupal 7
Drupal 6
quelle
drush sql-query "DELETE FROM semaphore WHERE name='cron'"
Sie können das Cron mit dem Cron-Debug- Modul debuggen .
quelle
So habe ich das Cron-Problem gelöst:
name = cron
quelle
Für Drupal 8: drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
quelle
Auf Drupal 7, als noch eine andere Option,
Via bekam
drush cron
ich,Dies war in der Entwicklungsumgebung der Fall, da ein vorheriger Cron ausgeführt wurde und unterbrochen wurde.
In
includes/common.inc
Zeile 5413 oder in der Nähe finden Sie diesen Block unter https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413Ändern Sie die
if
mit einem&& FALSE
,Und Cron erneut ausführen. Dann kann es laufen.
Bitte stellen Sie dies nicht bereit und setzen Sie es zurück, wenn es fertig ist. Es hilft auch beim Debuggen.
quelle
Ich bin ein paar Mal darauf gestoßen. In Drupal 6 Wenn Sie kein drush verwenden, können Sie dies folgendermaßen beheben:
1 Entfernen Sie die Variablen cron_% aus der Variablentabelle.
2 Löschen Sie den Drupal-Cache unter: / admin / settings / performance
Klicken Sie unten auf der Seite auf die Schaltfläche "Cache-Daten löschen".
3 Führen Sie cron über das Admin-Panel / admin / reports / status / run-cron aus. Führen Sie es nicht über die Befehlszeile aus, da dies zu Problemen führen kann.
4 Überprüfen Sie, ob der nächste automatische Cron-Lauf wie gewohnt abgeschlossen ist.
quelle
Sie können mit xdebug debuggen und cron über die Admin-Oberfläche Admin> Configuration> system> cron ausführen.
quelle