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

Стандартный или лучший способ поддерживать процесс, запущенный init.d

Я ищу стандартный способ или передовую практику, чтобы демон запускался init.d сценарий оболочки жив.

Или даже лучше, есть ли способ сохранить его живым прямо из /etc/init.d?

В частности, у меня есть демон с именем dtnd with и бесконечный цикл, который ищет неожиданно завершенный процесс, если они есть, демон снова их разбудит. Кроме того, я использую инструмент start-stop-daemon, чтобы разрешить прецессию запускаться от данного системного пользователя.

Я хочу запустить этот демон dtnd из автозагрузки. Чтобы добиться такого поведения, я создал сценарий init.d, который «обертывает» файл dtnd с помощью команд start, stop и status.

У меня есть 2 вопроса, которые я хотел бы решить:

  1. Есть ли способ добиться сохранение какого-то процесса из init.d сценарий оболочки. Это стандартный / лучший способ?

  2. Рекомендуется поддерживать процесс с помощью бесконечного цикла? Думаю, лучше использовать какую-нибудь команду вроде respawn чтобы добиться этого. Это верно?

Я знаю о существовании respawn команда. Я думаю, что это то, что мне нужно, но я не понимаю рабочий процесс между /etc/init.d/ и /etc/init. Может кто-нибудь помочь мне?

Обратите внимание, что у меня нет ни inittab, ни выскочки (мне разрешено использовать только /etc/init, /etc/init.d, cron и системные инструменты как start-stop-daemon. Я имею в виду, только инструменты по умолчанию)

Большое вам спасибо за ваше время!

В конечном итоге у Debian будет systemd, так что это способ сделать это в системе Linux, которая использует systemd (и многие уже используют; вы можете подумать о смене дистрибутивов).

Systemd может автоматически поддерживать работу службы; никаких других инструментов не требуется. Просто убедитесь, что Restart=always устанавливается в служебном файле [Service] раздел.

# vi /etc/systemd/system/dtnd.service

[Service]
Restart=always
#...everything else...

Несколько других вариантов также доступны для более сложных сценариев.

Вы можете добавить это в /etc/inittab с участием respawn:

d1:2345:respawn:/path/to/your/first_daemon arg1 arg2
d2:2345:respawn:/path/to/your/second_daemon arg1 arg2

Это грязный прием, но я успешно использовал его в прошлом на старых системах sysv-init.

Что ж, это одна из основных причин, почему debian переходит на systemd.

sysvinit (/etc/init.d) не может обнаружить, если служба не работает / не отвечает. Это означает, что вы должны отслеживать эти службы и повышать уровень обслуживания, если служба больше не выполняет свою работу.

вероятно, проще всего было бы перейти на другой демон-обработчик, например systemd (по умолчанию в RHEL7, будет по умолчанию в следующих debian и ubuntu lts), upstart (по умолчанию в RHEL6, Ubuntu 12.04 и 14.04), daemontools (как уже упоминалось, разработано djb) или что-то еще.

выполнение работы по поддержанию работоспособности службы будет PITA в sysvinit.

Стандартный подход для меня - использовать Утилита Monit для этого.

Я не могу точно сказать из вашего описания, написали ли вы что-то вроде Monit и пытаетесь убедиться, что он работает, или вам нужно что-то для наблюдения за созданным вами демоном.

Лучшая практика - убедиться, что ваши демоны НЕ ОСТАНАВЛИВАЮТСЯ.

Если вы не захотите взглянуть на DJB DAEMON Tools