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

systemd: включить, статус запуска (ожидания)

Если я сделаю это в сценарии, при вызове статуса будет отображаться "ОК".

  1. systemctl включить foo
  2. systemctl start foo
  3. systemctl status foo

Но всего через несколько миллисекунд статус «сбой».

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

Что для меня здесь означает «успешно»: сервер заработал.

Systemd запускает процесс и не ждет, чтобы убедиться, что сервер запустился правильно.

Пример: Конфигурация сервера содержит синтаксическую ошибку. Сервер будет работать несколько миллисекунд, но затем прекратит работу.

Самым простым решением было бы выполнить «sleep 1» перед моим вызовом «systemctl status foo».

Но это кажется грязным.

Возможно, есть лучшее решение для получения реального статуса после запуска сервера.

Меня волнует только начало. Если через два часа сервер выйдет из строя, это не входит в этот вопрос.

Обычно вы получаете failed состояние в этом выводе команды для запущенного процесса, когда:

  1. Процесс завершается с status что не равно 0 или со статусом, отличным от SuccessExitStatus параметр, указанный в файле модуля [Service] раздел
  2. Нечистый сигнал, отправленный демону (убить и т. Д.)
  3. Тайм-аут при запуске демона, может быть установлен через TimeoutStartSec или TimeoutSec, по умолчанию - значение DefaultTimeoutStartSec, который обычно составляет 90 секунд или установлен в system.conf, [Manager] раздел
  4. Watchdog (когда type=notify), как и выше, управляется WatchdogSec, RuntimeWatchdogSec

Служба должна регулярно вызывать sd_notify (3) с «WATCHDOG = 1» (т. Е. «Keep-alive ping»). Если время между двумя такими вызовами больше, чем настроенное время, служба переводится в состояние сбоя.

  1. typeнеправильно установлен в файле модуля

  2. GuessMainPID

Принимает логическое значение, указывающее, следует ли systemd попытаться угадать основной PID службы, если он не может быть надежно определен. Этот параметр игнорируется, если не установлен Type = forking. и PIDFile = не установлен, потому что для других типов или с явно настроенным файлом PID всегда известен основной PID. Алгоритм угадывания может прийти к неверным выводам, если демон состоит из более чем одного процесса. Если основной PID не может быть определен, обнаружение сбоев и автоматический перезапуск службы не будут работать надежно.. По умолчанию да.