O trabalho Cron está preso no status "em execução"
Este artigo fornece soluções para quando os trabalhos do Adobe Commerce cron não terminarem de ser executados e persistirem em um status "em execução", o que impede a execução de outros trabalhos do cron. Isso pode acontecer por vários motivos, como problemas de rede, falhas em aplicativos e problemas de reimplantação.
Produtos e versões afetados
Adobe Commerce na infraestrutura em nuvem, todas as versões
Sintoma symptom
Os sintomas de cron trabalhos que devem ser redefinidos incluem:
- Uma grande quantidade de trabalhos aparece na fila
cron_schedule
- O desempenho do site começa a diminuir
- Os trabalhos não são executados de acordo com o agendamento
Soluções solutions
Solução para interromper todos os cron trabalhos de uma só vez solution-stop-all-crons-at-once
--job-code
redefine todos os trabalhos cron, incluindo aqueles em execução no momento. Portanto, recomendamos usá-lo somente em casos excepcionais, como quando você verifica se todos os trabalhos cron devem ser redefinidos. A reimplantação executa esse comando por padrão para redefinir cron trabalhos, para que eles sejam recuperados adequadamente após o backup do ambiente. Evite usar esta solução quando os indexadores estiverem em execução.Para resolver esse problema, você deve redefinir o(s) trabalho(s) cron usando o comando cron:unlock
. Este comando altera o status do trabalho cron no banco de dados, encerrando o trabalho à força para permitir que outros trabalhos agendados continuem.
- Abra um terminal e use suas chaves SSH para se conectar ao ambiente afetado.
- Obtenha as credenciais do banco de dados MySQL:
shell echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
- Conectar ao banco de dados usando
mysql
:shell mysql -hdatabase.internal -uuser -ppassword main
- Selecione o banco de dados
main
:shell use main
- Localizar todos os cron trabalhos em execução:
shell SELECT * FROM cron_schedule WHERE status = 'running';
- Copie o
job_code
de qualquer trabalho que esteja sendo executado por mais tempo do que o normal. - Use as IDs de agendamento da etapa anterior para desbloquear cron trabalhos específicos:
shell ./vendor/bin/ece-tools cron:unlock --job-code=<job_code_1> [... --job-code=<job_code_x>]
Solução para parar um único cron solution-stop-a-single-cron
-
Abra um terminal e use suas chaves SSH para se conectar ao ambiente afetado.
-
Verifique as tarefas de longa duração usando o seguinte comando:
date; ps aux | grep '[%]CPU\|cron\|magento\|queue' | grep -v 'grep\|cron -f'
-
Na saída, como na saída de exemplo abaixo, você verá a data atual e a lista de processos. A coluna
START
mostra a hora ou a data de início do processo: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
-
Se você observar trabalhos cron de longa execução que possam bloquear o processo de implantação, é possível encerrar o processo usando o comando
kill
. Você pode identificar a ID do Processo (localizada a colunaPID
) e colocar essaPID
no comando para eliminar o processo.
O comando eliminar processo é:kill -9 <PID>
-
Em seguida, você pode reimplantar, se estava tentando reimplantar.