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

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

supervisor поднимает упавшего демона

средне~12 мин

Обработчик очереди /usr/local/bin/queue-consumer иногда падает, а systemd в контейнере нет — поднимать его некому. Поручи это supervisor: опиши программу consumer, которая запускает этот демон и автоматически перезапускает его после смерти. Демон пишет о своей работе в stdout — пусть supervisor складывает этот вывод в /var/log/consumer.log.

Что потренируешь:
  • supervisor
  • supervisorctl
  • автоперезапуск
  • stdout_logfile
  • демоны

Разбор темы

Процесс, упавший от ошибки или сигнала, сам не воскреснет — нужен родитель, который следит за ним. В контейнерах без systemd эту роль играет supervisor: он запускает программы как дочерние процессы, получает SIGCHLD, когда ребёнок умирает, и при включённом автоперезапуске запускает его снова. Программа описывается секцией [program:ИМЯ] в /etc/supervisor/conf.d/; там же указывают, куда сохранять её stdout, — демону не нужно самому знать про файлы логов. Новые конфиги supervisor подхватывает командами supervisorctl reread и update.

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

  1. supervisor держит consumer в RUNNING
  2. вывод демона пишется в /var/log/consumer.log
  3. consumer поднимается после падения

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