Eu tenho algumas instâncias ec2 em execução na AWS, que são dimensionadas por uma política de escalonamento automático, está tudo bem, as máquinas aumentam e diminuem muito bem. No entanto, uma falha que temos é que, quando ele reduz, as solicitações processadas nas instâncias (a serem encerradas) são perdidas no meio enquanto o encerramento ocorre.
O que eu gostaria de fazer é capturar o sinal de desligamento e pedir ao Apache para desligar normalmente e depois deixar o desligamento continuar.
Responder1
Eu descobri, é uma espécie de hack, mas parece estar funcionando para mim.
Quando o sistema recebe um sinal de desligamento, os scripts da pasta /etc/rc0.d são executados, o que envolve scripts para desligar todos os serviços inclusive o Apache; caso o script demore muito para desligar, o AWS será desligado, não sei quanto tempo é muito longo.
De qualquer forma, foi isso que eu fiz, editei o arquivo /etc/rc0.d/K09apache2
Na função apache_stop apache_stop() {
if $APACHE2CTL configtest > /dev/null 2>&1; then
# if the config is ok than we just stop normaly
#$APACHE2CTL stop 2>&1 | grep -v 'not running' >&2 || true
echo "stopping the apache gracefully"
$APACHE2CTL -k graceful-stop 2>&1 | grep -v 'not running' >&2 || true
sleep 15
Mude a parada abrupta para parada graciosa e durma por 15 segundos para ter certeza de que ela morre normalmente.
Atualização – agora o Amazon ELB oferece a remoção elegante de instâncias como um recurso.