Сила systemd для проверки состояния службы через n секунд

У меня есть системный сервис (для heka), который вызывает у меня некоторые головные боли.

Проблема в том, что «start» возвращается успешно, даже если демон heka умирает вскоре после запуска. Это происходит, если файлы конфигурации неверны, например: процесс запустится, он проверит конфигурацию и умрет, если он не удовлетворен тем, что он находит. В этом случае система успешно возвращается.

Есть ли способ заставить systemd проверить статус программы после ее инициализации? Может быть, спать через несколько секунд после начала процесса?

Это сценарий:

[Unit] Description=Heka event/metric/log collection and routing daemon After=network.target auditd.service ConditionPathExists=!/etc/heka/hekad_not_to_be_run [Service] EnvironmentFile=-/etc/default/heka Type=simple PIDFile=/var/run/hekad.pid ExecStart=/usr/bin/hekad -config=/etc/heka ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure StandardError=inherit [Install] WantedBy=multi-user.target Alias=heka.service 

  • Проблема с systemd & ksoftirqd
  • Переключитесь на макет dvorak при загрузке. (дешифрование и sddm)
  • Добавление системного .service (Debian)
  • список выбираемых единиц для журнала
  • nfs-kernel-server запускается слишком рано
  • Использование локального адреса связи для подключения кроссовера
  • systemd После того, как опция не работает
  • система не отключится, перезагрузится: «Синхронизация кеша SCSI»
  • 3 Solutions collect form web for “Сила systemd для проверки состояния службы через n секунд”

    Вы можете объединить несколько команд ExecPostStart. И вы можете запускать их, даже если основной ExecStart не удалось, добавив – / ( systemd.service: Type = ). Что-то вроде этого:

     ExecStart=-/usr/bin/hekad -config=/etc/heka ExecStartPost=/bin/sleep 3 ExecStartPost=/bin/kill -0 $MAINPID &>/dev/null 

    Это гарантирует, что вы все еще используете MAINPID при остановке или перезапуске службы, например.

    Если есть простой способ проверить, hekad ли hekad я бы запустил демона, используя ExecStartPre=/usr/bin/hekad -config=/etc/heka а с ExecStart запустил небольшой скрипт, в котором есть цикл, в котором первый сон X секунд, а затем проверяет, продолжает ли демон hekad. Разрыв цикла, только если hekad кажется, остановился.

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

    См. https://www.freedesktop.org/software/systemd/man/systemd.service.html.

    Linux и Unix - лучшая ОС в мире.