Skip to content

Latest commit

 

History

History
66 lines (53 loc) · 4.66 KB

services.md

File metadata and controls

66 lines (53 loc) · 4.66 KB

Требования к WB сервисам

Чеклист при проверке нового сервиса

Сервис хорош, если соответствует всем пунктам чеклиста.

Список будет расширяться, много сервисов будет им не соответствовать.

Сервис:

  • восстанавливает работоспособность при перезапуске брокера:
    • не зависает;
    • не падает;
    • подписывается на все свои топики;
    • публикует заново retain-сообщения с метаданными;
  • падает при ошибке аутентификации без перезапуска в systemd;
  • одинаково отключается сигналами SIGTERM и SIGINT;
  • аккуратно завершается при отключении:
    • гарантированно публикует пустые retain-сообщения на месте метаданных;
    • отправляет disconnect (смотреть в логах mosquitto);
  • аккуратно завершается, если, согласно конфигу, от сервиса ничего не требуется:
    • пример: в serial выключены все порты, в mbgate выключены все топики и т.п.

Возвращаемые значения при завершении работы сервиса

Сервис в зависимости от типа возникающих ошибок возвращает код:

  • EXIT_SUCCESS=0 (входит в stdlib.h) - успешное завершение (не имеет смысла в контексте долгоживущего сервиса, подходит для oneshot). Для обычных сервисов см. EXIT_NOTRUNNING=7
  • EXIT_FAILURE=1 (входит в stdlib.h) - общая ошибка при неудачном завершении работы сервиса, есть смысл перезапустить сервис
  • EXIT_INVALIDARGUMENT=2 (входит в спецификацию LSB) - неверные или лишние аргументы командной строки, автоматически перезапускать сервис бессмысленно
  • EXIT_NOTCONFIGURED=6 (входит в спецификацию LSB) - неверная конфигурация (когда конфиг плохо распарсился или в нём есть логические ошибки), автоматически перезапускать сервис бессмысленно
  • EXIT_NOTRUNNING=7 (входит в спецификацию LSB) - согласно конфигурации, сервису не надо ничего делать, потому он выключился и не потребляет ресурсов, при этом он не failed

Дополнительные коды можно взять из спецификации: https://freedesktop.org/software/systemd/man/systemd.exec.html#Process%20Exit%20Codes

Настройка systemd модуля

При неудачном завершении сервиса со статусом EXIT_FAILURE=1 должна производится попытка повторного запуска. За это отвечает параметр в файле настройки systemd модуля:

[Service]
...
Restart=on-failure
RestartSec=<Время ожидания перед перезапуском службы, сек>
...

Для предотвращения повторного запуска сервиса, если возникла неустранимая ошибка в конфигурационных файлах сервиса, либо ошибках отличных от EXIT_FAILURE, то добавляется параметр в файл настройки systemd модуля в секцию Service:

[Service]
...
RestartPreventExitStatus=2 3 4 5 6
...

Чтобы статус EXIT_NOTRUNNING=7 не считался ошибкой, необходимо добавить параметр в файл настройки systemd модуля в секцию Service:

[Service]
...
SuccessExitStatus=7
...