Практическое задание

Эта задача — шаг 21 курса «Процессы и сигналы»

Два демона и мягкая остановка

средне~12 мин

Под supervisor должны работать две программы: ingest (/usr/local/bin/ingestd) и notifier (/usr/local/bin/notifierd), обе с автоперезапуском после падения.

Есть нюанс: notifierd корректно завершается (дописывает очередь и оставляет маркер /var/tmp/notifier.graceful) только по сигналу INT, а от TERM, который supervisor шлёт по умолчанию, просто умирает. Настрой так, чтобы supervisorctl stop notifier останавливал его через INT.

Что потренируешь:
  • supervisor
  • stopsignal
  • SIGINT
  • автоперезапуск
  • graceful shutdown

Разбор темы

Менеджер процессов останавливает программу сигналом, и по умолчанию это SIGTERM. Но демоны по-разному понимают сигналы: одни корректно завершаются по TERM, другие — только по INT или QUIT, а TERM для них означает немедленную смерть без уборки. Поэтому в supervisor сигнал остановки настраивается для каждой программы отдельно, вместе с временем ожидания перед SIGKILL. Каждая программа описывается своей секцией [program:ИМЯ]; после правки конфигов их подхватывают supervisorctl reread и update.

Что проверяется

  1. ingest в состоянии RUNNING
  2. notifier в состоянии RUNNING
  3. обе программы поднимаются после падения
  4. notifier останавливается сигналом INT

Как это выглядит