Meu palpite: Como eles são iniciados ao mesmo tempo, talvez eles criem alguma condição de corrida ou bloquear no banco de dados, impedindo a conclusão bem-sucedida de todos ou alguns deles. Eu diria que provavelmente são apenas dois deles interligados e incapazes de terminar.
E como um novo trabalho é iniciado a cada minuto, há mais e mais contendores para o recurso (presumivelmente o MySQL), nenhum deles capaz de fazer seu trabalho devido a alguns bloqueios. O uso de recursos na instância continua aumentando e a instância finalmente morre.
Esse é o meu palpite.
O que fazer: Quando isso acontece com o SSH na instância, use ps -faxu
e / ou use top
para descobrir quais tarefas cron ainda estão em execução. Você poderá dizer a partir do nome do processo.
A próxima etapa é garantir que a tarefa cron incorreta seja executada apenas uma vez por vez.
Você tem algumas opções:
-
Simples e provavelmente não muito confiável é espalhar os trabalhos cron ao longo do minuto. Algo como preceder
sleep 10
/sleep 20
/ ...:sleep 10; . /opt/elasticbeanstalk/support/envvars && /var/app/current/bin/cake cronjob_number_one > /var/log/cronjobs_php 2>&1
-
Melhor ainda, um pouco mais complexo seria usar semáforos , por exemplo, com a ajuda de
flock(1)
. Essencialmente, é assim que funciona:- você inicia o trabalho cron
- ele chama
flock
para tentar criar um arquivo de bloqueio - se for bem sucedido - > execute o trabalho real
- se não (porque o antigo ainda existe, porque o trabalho ainda não terminou) - > sair
Espero que ajude:)