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

systemd: Завершить работу службы, активированной сокетом / отключить активацию сокета

У меня есть HTTP-сервис (назовем его Foo) с активацией сокета systemd. Я хотел бы поддержать эту настройку:

  1. служба мониторинга сообщает Foo об остановке (например, POST / stop)
  2. Foo завершает свою (потенциально долгую) работу и выходит.
  3. Служба мониторинга опрашивает конечную точку HTTP на Foo (например, GET / are-you-up), ожидая ее выхода.

На шаге 3, когда служба мониторинга попадает в состояние готовности, активация сокета systemd перезапускает службу HTTP!

Я все еще хотел бы, чтобы systemd управляла сокетом (чтобы моя служба не запускалась / запускалась как root). Я бы также хотел, чтобы systemd перезапустил мою службу в случае сбоя (код выхода отличный от 0).

Возможно ли что-то из этого?

Большая картина такова, что услуга заменяется. После выключения (облачный) сервер будет удален.

Для всех, кто застрял в этом, то, что я в итоге сделал, - это отключил HTTP-прослушиватель, но сохранил процесс. В псевдокоде служба Foo: close(httpSocket) print("Stopped") sleep(forever)

Это означает, что служба мониторинга GET /are-you-up будет знать, что служба выполнена, systemd не перезапускает ее, и я все равно получаю все остальные достоинства systemd. На практике он хорошо работает уже несколько месяцев.

Если есть более чистый вариант, добавьте свой ответ. Спасибо!