Cron hörte auf zu rennen. In den Protokollen heißt es: "Es wird versucht, cron erneut auszuführen, während es bereits ausgeführt wird."

11

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."

giorgio79
quelle
Ich konnte mich nicht genau erinnern, was in der Datenbank cron aussieht, aber ein kurzer Versuch, cron erneut auszuführen, während es bereits ausgeführt wird, deutete mich möglicherweise auf digitaledgesw.com/node/21 gelten für D7
Jimajamma
Das ist sehr merkwürdig. Diese Nachricht wird genau einmal im Code für core gefunden, direkt nach einer Überprüfung dieser Variablen (über lock_acquire in drupal_cron_run). Wenn Sie weitere Informationen / Symptome posten, die darauf hinweisen, dass es sich tatsächlich um ein anderes handelt, werde ich es erneut öffnen.
mpdonadio
Vorschlag: Können Sie versuchen, einen neuen Drupal zu installieren und cron so einzustellen, dass er alle 3 Minuten ausgeführt wird und zu prüfen, ob Sie den gleichen Effekt erzielen !!!
Aboodred1
Führen Sie einfach:drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
Kenorb
4
ZUKÜNFTIGE LESER: Die aktuell akzeptierte Antwort ist für Drupal 7, die Drupal-Version, für die die Frage ist, nicht korrekt. Es ist gültig für Drupal 6, aber der Drupal 7-Code wurde geändert. Es kommt einfach vor, dass Drupal 7 Reste von Drupal 6 enthält, die nicht bereinigt wurden.
kiamlaluno

Antworten:

12

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:

$ drush vdel -y cron_semaphore
Amateur Barista
quelle
3
Oder löschen Sie es manuell aus der Variablentabelle, wenn Sie nicht drush, sondern db-Zugriff haben.
Malks
8
Vergessen Sie nicht, dass diese Werte in der Tabelle zwischengespeichert werden cache_bootstrap.
Tostinni
1
bitte wie heißt die tabelle genau, da ich in der variablentabelle kein cron_semaphore gefunden habe
mohammed amine bourkadi
2
Wenn ich den oben genannten Befehl drush ausführe, wird "cron_semaphore not found" angezeigt. Irgendwelche Ideen?
Nigel Waters
1
@NigelWaters Das Cron-Semaphor wurde in Drupal 7 zu einer Sperre, drupal_cron_cleanup()scheint jedoch nicht aktualisiert zu werden.
kiamlaluno
19

Zusammenfassung

Die angezeigte Fehlermeldung würde auftreten, wenn die folgenden beiden Bedingungen erfüllt sind:

  • Ihre Cron-Jobs werden nicht beendet (Fehler) oder es dauert länger als 4 Minuten, bis sie beendet sind.
  • Sie rufen cron öfter als alle 4 Minuten auf (entsprechend Ihrer crontab-Einstellung, nicht der Einstellung in Drupal)

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:

DELETE FROM semaphore WHERE name = 'cron';

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.

Alice Heaton
quelle
Ich erhalte diese Meldung, aber wenn ich cron_debug starte, werden alle cron-Jobs erfolgreich beendet und schnell ausgeführt (mit Ausnahme der Kernaktualisierungen, die ~ 5 Sekunden dauern). Wenn die Ursache für dieses Problem langsam ist oder cron-Routinen fehlschlagen, warum sollte cron_debug sie nicht hervorheben?
doub1ejack
1
Ich weiß nicht, wie das Modul cron_debug funktioniert, daher kann ich dies nicht wirklich kommentieren. Was ist der Wert der Variablen 'cron_safe_threshold'? Welche Daten enthält die 'Semaphor'-Tabelle?
Alice Heaton
1
Dies ist die richtige Antwort für Drupal 7. +1 für die detaillierte Erklärung.
kiamlaluno
Übrigens, wenn cron für Sie fehlschlägt, verwenden Sie die Cron-Debug-Module, um zu sehen, an welchem ​​Modul es aufhängt - 9 von 10 ist es das Suchmodul. Schalten Sie das Suchmodul aus und führen Sie cron manuell aus, um zu sehen, was passiert. Um die Knoten zu finden, wird versucht, sie zu indizieren: drupal.stackexchange.com/questions/22825/…
Dan Mantyla
4

Die cron_semaphoreVariable war in Drupal 6 vorhanden, aber Sie verwenden Drupal 7, sodass die Semaphorsperren in eine separate Tabelle mit dem Namen verschoben wurden semaphore.

Die Lösung zum Entsperren des Cron-Semaphors wäre:

Drupal 7

drush sqlq "TRUNCATE semaphore"

Drupal 6

drush -y vdel cron_semaphore 
Kenorb
quelle
3
"Weniger extreme" Variante für Drupal 7:drush sql-query "DELETE FROM semaphore WHERE name='cron'"
Tanius
2

Sie können das Cron mit dem Cron-Debug- Modul debuggen .

Cron Debug hilft Ihnen dabei, Cron-Prozesse zu finden, die

  • Fehler aufgrund von Programmier- oder Laufzeitfehlern
  • Auszeit (PHP, Server, Datenbank)
  • sind sehr langsam

Mit Cron Debug können Sie auch bestimmte Cron-Funktionen testen, ohne andere auszuführen. Dies kann nützlich sein, um Cron-Funktionen zu entwickeln, bei denen Sie nicht jedes Mal, wenn Sie Ihre eigene Funktion testen, eine vollständige cron.php mit allen Wartungs-, Warn- und anderen Aufgaben ausführen möchten.

Nishant
quelle
1
Dieses Modul hat mir das Leben gerettet!
Dan Mantyla
ja, dieses modul ist gut, es hilft den cron job zu debuggen.
Nishant
1

So habe ich das Cron-Problem gelöst:

  1. Über PhpMyAdmin habe ich in die Semaphortabelle geschaut und dort Zeile gelöscht name = cron
  2. Ich habe "drush cron" über die Kommandozeile ausgeführt
  3. Ich habe eine Fehlermeldung gesehen, die mir einen Hinweis auf das Problem gab. Dies mag für Sie anders sein, aber für mich verursachte ein kürzlich deinstalliertes Modul, das eine PHP-Bibliothek mit einem installierten Modul gemeinsam nutzte, einen Fehler
albertski
quelle
0

Für Drupal 8: drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"

Diana
quelle
0

Auf Drupal 7, als noch eine andere Option,

Via bekam drush cronich,

WD cron: Attempting to re-run cron while it is already running.       [warning]
Cron run failed.                                                      [error]

Dies war in der Entwicklungsumgebung der Fall, da ein vorheriger Cron ausgeführt wurde und unterbrochen wurde.

In includes/common.incZeile 5413 oder in der Nähe finden Sie diesen Block unter https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0)) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

Ändern Sie die ifmit einem && FALSE,

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0) && FALSE) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

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.

rovr138
quelle
-1

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.

SELECT * FROM variable WHERE name like "cron%";

DELETE FROM variable WHERE name like "cron%";

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.

Munkiepus
quelle
Willkommen bei Drupal Answers! Die Frage bezieht sich auf Drupal 7. Das Löschen von Zeilen aus dieser Datenbanktabelle hätte keine großen Auswirkungen.
kiamlaluno
Ah, ich habe nur die Antwort hinzugefügt, da nicht ausdrücklich gesagt wurde, dass es sich um Drupal 7 im OP handelt. Das funktioniert gut für Drupal 6 und ist vollständiger als die üblichen Antworten zum Löschen des Semaphors. Ich dachte, es wäre hilfreich, wenn jemand von d6 hier landen würde. War das falsch Ich bin dafür bestimmt.
Munkiepus
Gerade aktualisiert, um den run cron vom Kommandozeilenteil zu entfernen. Gerade herausgefunden, dass er Probleme verursachen kann
munkiepus
-1

Sie können mit xdebug debuggen und cron über die Admin-Oberfläche Admin> Configuration> system> cron ausführen.

Abdulla Abu Zakham
quelle