Cron La tâche est bloquée dans l’état "running"

Cet article fournit des solutions pour les cas où Adobe Commerce cron les tâches ne se terminent pas et sont conservées dans un état "en cours", ce qui empêche d’autres cron à partir de l’exécution. Cela peut se produire pour plusieurs raisons, telles que des problèmes réseau, des blocages d’application, des problèmes de redéploiement.

Produits et versions concernés

Adobe Commerce sur l’infrastructure cloud, toutes les versions

Symptôme symptom

Symptômes de cron les tâches qui doivent être réinitialisées sont les suivantes :

  • Une grande quantité de tâches s’affiche dans la variable cron_schedule queue
  • Les performances du site commencent à diminuer
  • Les tâches ne s’exécutent pas selon le calendrier

Solutions solutions

Solution pour arrêter tout cron tâches à la fois solution-stop-all-crons-at-once

WARNING
Exécutez cette commande sans le --job-code options de réinitialisation all cron les tâches, y compris celles en cours d’exécution. Nous vous recommandons donc de ne l’utiliser que dans des cas exceptionnels, par exemple après avoir vérifié que toutes les cron les tâches doivent être réinitialisées. Le redéploiement exécute cette commande par défaut pour réinitialiser cron les tâches, de sorte qu’elles récupèrent correctement une fois l’environnement sauvegardé. Évitez d’utiliser cette solution lorsque les indexeurs sont en cours d’exécution.

Pour résoudre ce problème, vous devez réinitialiser la variable cron tâche(s) à l’aide du cron:unlock . Cette commande modifie l’état de la fonction cron dans la base de données, mettant fin à la tâche pour permettre à d’autres tâches planifiées de continuer.

  1. Ouvrez un terminal et utilisez Clés SSH pour se connecter à l’environnement concerné.
  2. Obtenez les informations d’identification de la base de données MySQL : shell echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
  3. Connectez-vous à la base de données à l’aide de mysql : shell mysql -hdatabase.internal -uuser -ppassword main
  4. Sélectionnez la variable main base de données : shell use main
  5. Tout exécuter cron jobs : shell SELECT * FROM cron_schedule WHERE status = 'running';
  6. Copiez le job_code de toute tâche s’exécutant plus longtemps que d’habitude.
  7. Utilisez les ID de planification de l’étape précédente pour déverrouiller des cron jobs : shell ./vendor/bin/ece-tools cron:unlock --job-code=<job_code_1> [... --job-code=<job_code_x>]

Solution pour arrêter un seul cron solution-stop-a-single-cron

  1. Ouvrez un terminal et utilisez Clés SSH pour se connecter à l’environnement concerné.

  2. Vérifiez les tâches longues en cours à l’aide de la commande suivante :

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

  3. Dans la sortie, comme dans l’exemple de sortie ci-dessous, vous verrez la date actuelle et la liste des processus. La variable START affiche l’heure ou la date de début du processus :

    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. Si vous constatez une longue exécution cron tâches pouvant être le processus de déploiement par bloc, vous pouvez arrêter le processus à l’aide de la fonction kill . Vous pouvez identifier la variable ID de processus (Recherchez la variable PID ), puis placez-le. PID dans la commande pour tuer le processus.
    La variable tuer le processus est la commande suivante :

    kill -9 <PID>

  5. Vous pouvez ensuite effectuer un redéploiement si vous tentez de le redéployer.

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