корректная остановка apache при завершении работы

корректная остановка apache при завершении работы

У меня есть несколько экземпляров ec2, запущенных в AWS, которые масштабируются политикой автомасштабирования, все в порядке, машины масштабируются вверх и вниз довольно хорошо. Однако у нас есть один глюк: когда он масштабируется вниз, запросы, обрабатываемые на (подлежащих завершению) экземплярах, теряются в середине, пока происходит завершение.

Мне бы хотелось перехватить сигнал завершения работы и попросить Apache выполнить корректное завершение работы, а затем позволить процессу завершения работы продолжиться.

решение1

Я нашел это, это своего рода хак, но, похоже, он мне помогает.

Когда система получает сигнал о завершении работы, запускаются скрипты в папке /etc/rc0.d, в том числе скрипты для завершения работы всех служб, включая Apache; если выполнение скрипта займет слишком много времени, AWS выключится, я не знаю, какой срок будет слишком долгим.

В любом случае, вот что я сделал: я отредактировал файл /etc/rc0.d/K09apache2

В функции 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

Измените резкую остановку на плавную и дайте системе заснуть на 15 секунд, чтобы убедиться, что она заглохнет плавно.

Обновление — теперь Amazon ELB предоставляет функцию постепенного удаления экземпляров.

Связанный контент