Назад | Перейти на главную страницу

Как долго демоны должны завершать работу после получения сигнала о завершении работы сервера?

Поскольку мы разрабатываем сложный набор сервисов в Linux, мы разработали инструмент, который запускает их один за другим. Одним из многих соображений при создании такого инструмента был порядок, в котором элементы могут быть запущены, а также способ гарантировать, что после смерти демона он будет автоматически перезапущен. Существуют также общесерверные параметры, которые используются всеми службами.

Однако сейчас у меня возникла проблема, когда отключение такой системы требует времени. Чтобы все выключить, может потребоваться до 10 секунд.

Что мне интересно: как долго сценарий определяется в /etc/init.d/... можно ли отключить демонов, которыми он управляет?

Хотя я мог бы предположить, что если бы мы разбили все эти демоны на отдельные пакеты (поскольку сценарии запуска теперь могут включать список зависимостей ...), мы бы столкнулись с той же проблемой. Так что на данный момент мы предпочитаем оставить все как есть ...

Есть ли четко определенное / известное количество времени, которое должно занять самое большее выключение, чтобы оно было корректно для всех демонов?

Есть ли четко определенное / известное время, которое должно длиться самое большее выключение?

Нет.

Поскольку я теперь тестировал завершение работы различных демонов в системе, работающей с systemd, я могу подтвердить, что тайм-аут четко определен для каждого демона.

Насколько я могу судить, это также относится к демонам, которые все еще запускаются / останавливаются с помощью сценария SysV. Когда Кассандра все еще работает со своими файлами, systemctl restart cassandra не будет работать должным образом. Для таких услуг вы, вероятно, захотите сделать systemctl stop cassandra и как только вы убедитесь, что он был остановлен, сделайте systemctl start cassandra.

Итак ... Вы можете определить / изменить TimeoutStopSec параметр для каждого демона. Это обеспечивает большую детализацию!

[Unit]
...
TimeoutStopSec=120

И вы можете изменить системное значение по умолчанию: DefaultTimeoutStartSec (что, вероятно, не рекомендуется ...)

Есть еще один важный момент - функция перезапуска (показанная в последней ссылке). Это очень важно, потому что systemd по умолчанию хочет перезапустить процесс через 100 мс !!! Так что, если вашему демону потребуется до 2 минут для выключения, он не будет работать правильно ...


Для тех, кому интересно, для Кассандры я сначала запустил скрипт, который останавливает Кассандру. Затем перехожу к выключению.

Это может занять столько времени, сколько нужно Кассандре (это может быть довольно долго), но это полностью остановит Кассандру. Обратите внимание, что может показаться, что так долго отключаться, но при перезапуске Кассандра будет готова почти мгновенно.

Для сравнения, очень быстрое завершение работы означает убийство Cassandra, а при перезапуске она должна вернуться к своим журналам, что на самом деле намного дольше. Так что это хороший компромисс.