Сила 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 

  • Как заменить sysvinit на systemd в дистрибутиве на основе Debian?
  • Правильное завершение работы компьютера с X сеанса
  • загрузка жесткого диска nfs занимает очень много времени
  • Использование openvpn с несколькими серверами под systemd
  • nfs-kernel-server запускается слишком рано
  • / sbin / init не существует - Выпуск
  • Попытка запуска скрипта python как службы с помощью systemd
  • Настройка TimeoutStopSec в файле systemd
  • 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.

    Interesting Posts

    Карта ctrl + key отличается от клавиши ввода в xkb или xmodmap

    Официальный список программ, которые будут включены в Linux?

    Почему оболочка Command Substitution сжимает конечный символ новой строки?

    Linux-сервер с чаем-деамоном, подключенным к активному каталогу, защищающему клиентов от использования драйверов или PPD

    Новая система SL6: нет имени хоста?

    Как создать псевдоним для сетевого устройства?

    Как узнать, запущен ли программный рейд или правильно настроен

    Как сделать псевдоним постоянным?

    Как я могу изменить адрес из почты * nix во всем мире?

    Получить список приложений, которые воспроизводят звук

    Как я могу увидеть историю использования памяти?

    Как я могу заставить mutt автоматически выбирать pgp-ключи?

    CROSS компиляция файловой системы BTRFS

    Как я могу перечислить верхние файлы потребления IO?

    Список файлов из вложенного zip-файла без лишних

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