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

Cet article fournit des solutions pour les tâches Adobe Commerce cron dont l’exécution n’est pas terminée et qui restent dans un état "en cours d’exécution", ce qui empêche les autres tâches cron de s’exécuter. 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

Les symptômes des tâches cron qui doivent être réinitialisées sont les suivants :

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

Solutions solutions

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

WARNING
L’exécution de cette commande sans l’option --job-code réinitialise toutes cron 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 tâches doivent être réinitialisées. Le redéploiement exécute cette commande par défaut pour réinitialiser les tâches cron, 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 ou les tâches cron à l’aide de la commande cron:unlock. Cette commande modifie l’état de la tâche cron dans la base de données, mettant ainsi fin à la tâche pour permettre la poursuite d’autres tâches planifiées.

  1. Ouvrez un terminal et utilisez vos clés SSH pour vous 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 base de données main : shell use main
  5. Recherchez toutes les tâches cron en cours d’exécution : 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 tâches cron spécifiques : 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 vos clés SSH pour vous 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 colonne START indique 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 voyez une tâche cron longue qui peut être le processus de déploiement bloqué, vous pouvez arrêter le processus à l’aide de la commande kill. Vous pouvez identifier l’ ID de processus (colonne PID trouvée), puis placer cet PID dans la commande pour tuer le processus.
    La commande kill process est la 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