El trabajo Cron se ha quedado atascado en el estado "en ejecución"

Este artículo proporciona soluciones cuando los trabajos de Adobe Commerce cron no terminan de ejecutarse y persisten en estado de "ejecución", lo que impide que se ejecuten otros trabajos de cron. Esto puede ocurrir por varios motivos, como problemas de red, bloqueos de aplicaciones o problemas de reimplementación.

Productos y versiones afectados

Adobe Commerce en la infraestructura en la nube, todas las versiones

Síntoma symptom

Los síntomas de cron trabajos que deben restablecerse incluyen:

  • Aparece una gran cantidad de trabajos en la cola cron_schedule
  • El rendimiento del sitio empieza a degradarse
  • Los trabajos no se ejecutan según lo programado

Soluciones solutions

Solución para detener todos los cron trabajos a la vez solution-stop-all-crons-at-once

WARNING
La ejecución de este comando sin la opción --job-code restablece todos los trabajos de cron, incluidos los que se están ejecutando actualmente, por lo que se recomienda usarlos únicamente en casos excepcionales, como después de comprobar que se deben restablecer todos los trabajos de cron. La reimplementación ejecuta este comando de forma predeterminada para restablecer cron trabajos, de modo que se recuperen correctamente después de realizar la copia de seguridad del entorno. Evite utilizar esta solución cuando se estén ejecutando indexadores.

Para resolver este problema, debe restablecer los trabajos de cron mediante el comando cron:unlock. Este comando cambia el estado del trabajo cron en la base de datos y lo finaliza forzosamente para permitir que continúen otros trabajos programados.

  1. Abra un terminal y use sus claves SSH para conectarse al entorno afectado.
  2. Obtenga las credenciales de la base de datos MySQL: shell echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
  3. Conectar con la base de datos mediante mysql : shell mysql -hdatabase.internal -uuser -ppassword main
  4. Seleccione la base de datos main: shell use main
  5. Buscar todos los trabajos de cron en ejecución: shell SELECT * FROM cron_schedule WHERE status = 'running';
  6. Copie el job_code de cualquier trabajo que se ejecute más de lo normal.
  7. Use los identificadores de programación del paso anterior para desbloquear cron trabajos específicos: shell ./vendor/bin/ece-tools cron:unlock --job-code=<job_code_1> [... --job-code=<job_code_x>]

Solución para detener un solo(a) cron solution-stop-a-single-cron

  1. Abra un terminal y use sus claves SSH para conectarse al entorno afectado.

  2. Compruebe las tareas de larga ejecución mediante el siguiente comando:

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

  3. En la salida, como en la salida de ejemplo a continuación, verá la fecha actual y la lista de procesos. La columna START muestra la fecha y la hora de inicio del proceso:

    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 ve cron trabajos de larga duración que podrían bloquear el proceso de implementación, puede terminar el proceso con el comando kill. Puede identificar el ID de proceso (se encontró la columna PID) y, a continuación, colocar ese PID en el comando para matar el proceso.
    El comando kill process está:

    kill -9 <PID>

  5. A continuación, puede volver a implementar si estaba intentando volver a implementar.

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