Cron Auftrag steckt im Status „Wird ausgeführt“ fest

Dieser Artikel bietet Lösungen für den Fall, dass Adobe Commerce cron-Aufträge nicht abgeschlossen werden und weiterhin den Status „Wird ausgeführt“ aufweisen, was die Ausführung anderer cron verhindert. Dies kann verschiedene Ursachen haben, z. B. Netzwerkprobleme, Anwendungsabstürze oder Probleme bei der erneuten Bereitstellung.

Betroffene Produkte und Versionen

Adobe Commerce auf Cloud-Infrastruktur, alle Versionen

Symptom symptom

Zu den Symptomen cron Aufträge, die zurückgesetzt werden müssen, gehören:

  • In der cron_schedule-Warteschlange werden viele Aufträge angezeigt
  • Site-Leistung beginnt zu sinken
  • Vorgänge werden nicht planmäßig ausgeführt

Lösungen solutions

Lösung zum gleichzeitigen Anhalten cron Aufträge solution-stop-all-crons-at-once

WARNING
Wenn Sie diesen Befehl ohne die Option --job-code ausführen, werden alle cron Aufträge zurückgesetzt, einschließlich der derzeit ausgeführten Aufträge. Daher empfehlen wir die Verwendung nur in Ausnahmefällen, z. B. nachdem Sie überprüft haben, dass alle cron Aufträge zurückgesetzt werden müssen. Bei der erneuten Bereitstellung wird dieser Befehl standardmäßig ausgeführt, um cron Aufträge zurückzusetzen, damit sie nach der Sicherung der Umgebung ordnungsgemäß wiederhergestellt werden. Vermeiden Sie diese Lösung, wenn Indexer ausgeführt werden.

Um dieses Problem zu beheben, müssen Sie den/die cron Auftrag/Aufträge mit dem Befehl cron:unlock zurücksetzen. Dieser Befehl ändert den Status des cron in der Datenbank und beendet den Vorgang erzwungen, damit andere geplante Aufträge fortgesetzt werden können.

  1. Öffnen Sie ein Terminal und verwenden Sie Ihre SSHSchlüssel, um eine Verbindung zur betroffenen Umgebung herzustellen.
  2. Abrufen der MySQL-Datenbankanmeldeinformationen: shell echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
  3. Stellen Sie mithilfe von mysql eine Verbindung zur Datenbank her: shell mysql -hdatabase.internal -uuser -ppassword main
  4. main auswählen: shell use main
  5. Alle laufenden cron Aufträge suchen: shell SELECT * FROM cron_schedule WHERE status = 'running';
  6. Kopieren Sie die job_code eines Auftrags, der länger als üblich ausgeführt wird.
  7. Verwenden Sie die Zeitplan-IDs aus dem vorherigen Schritt, um bestimmte cron zu entsperren: shell ./vendor/bin/ece-tools cron:unlock --job-code=<job_code_1> [... --job-code=<job_code_x>]

Lösung zum Anhalten einer einzelnen cron solution-stop-a-single-cron

  1. Öffnen Sie ein Terminal und verwenden Sie Ihre SSHSchlüssel, um eine Verbindung zur betroffenen Umgebung herzustellen.

  2. Überprüfen Sie Aufgaben mit langer Laufzeit mithilfe des folgenden Befehls:

    date; ps aux | grep '[%]CPU\|cron\|magento\|queue' | grep -v 'grep\|cron -f'

  3. In der Ausgabe werden Sie wie in der Beispielausgabe unten das aktuelle Datum und die Liste der Prozesse sehen. Die Spalte START zeigt die Startzeit oder das Datum des Vorgangs an:

    code language-none
    Wed May  8 22:41:31 UTC 2019
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root       590  0.0  0.0  27528  2768 ?        Ss   Jan15   0:49 /usr/sbin/cron -f
    bxc2qly+ 25855  0.0  0.0  23724  2184 ?        S    20:51   0:00 logger -d -u /run/bxc2qlykqhbqe_stg-cron.sock -p cron.info -s -t cron-bxc2qlykqhbqe_stg-bxc2qlykqhbqe_stg
    bxc2qly+ 25860 57.7  1.3 584220 222692 ?       S    20:51   0:02 php bin/magento cron:run
    bxc2qly+ 25863  0.0  0.0  23724  2472 ?        S    20:51   0:00 logger -d -u /run/bxc2qlykqhbqe-cron.sock -p cron.info -s -t cron-bxc2qlykqhbqe-bxc2qlykqhbqe
    bxc2qly+ 25876 53.0  0.6 475472 111468 ?       R    20:51   0:01 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=index --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25878 57.0  0.6 475472 112080 ?       R    20:51   0:01 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=staging --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25880 50.5  0.6 475472 111312 ?       R    20:51   0:01 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=catalog_event --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25882 48.5  0.6 475472 111220 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=consumers --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25884 50.5  0.6 475472 111372 ?       R    20:51   0:01 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=ddg_automation --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25890 32.5  0.6 475368 110672 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe/bin/magento cron:run --group=staging --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25892 34.5  0.6 475472 110724 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe/bin/magento cron:run --group=catalog_event --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25894 31.5  0.6 475368 110136 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe/bin/magento cron:run --group=consumers --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25896 29.0  0.6 475320 109876 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe/bin/magento cron:run --group=ddg_automation --bootstrap=standaloneProcessStarted=1
    
  4. Wenn cron Aufträge mit langer Laufzeit angezeigt werden, die den Bereitstellungsprozess blockieren können, können Sie den Vorgang mit dem Befehl kill beenden. Sie können die Prozess-ID (in der PID Spalte gefunden) identifizieren und diese PID dann in den Befehl zum Beenden des Prozesses einfügen.
    Der Kill process-Befehl lautet:

    kill -9 <PID>

  5. Wenn Sie eine erneute Bereitstellung versuchen, können Sie die Bereitstellung dann erneut durchführen.

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a