Tengo algunas instancias ec2 ejecutándose en AWS, que se escalan mediante una política de escalamiento automático, todo está bien, las máquinas escalan hacia arriba y hacia abajo bastante bien. Sin embargo, un problema que tenemos es que cuando se reduce, las solicitudes que se procesan en las instancias (que se van a terminar) se pierden en el medio mientras ocurre la terminación.
Lo que me gustaría hacer es captar la señal de apagado y pedirle a Apache que se apague correctamente y luego dejar que el apagado continúe.
Respuesta1
Lo encontré, es una especie de truco, pero parece funcionar para mí.
Cuando el sistema recibe una señal de apagado, se ejecutan los scripts en la carpeta /etc/rc0.d, lo que implica scripts para cerrar todos los servicios, incluido Apache; en caso de que el script tarde demasiado en apagarse, AWS se apagará, no sé cuánto tiempo es demasiado.
De todos modos, esto es lo que hice: edité el archivo /etc/rc0.d/K09apache2
En la función 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
Cambie la parada abrupta a una parada elegante y déjelo dormir durante 15 segundos para asegurarse de que muera con gracia.
Actualización: ahora Amazon ELB ofrece la eliminación elegante de instancias como característica.