Я ищу стандартный способ или передовую практику, чтобы демон запускался init.d
сценарий оболочки жив.
Или даже лучше, есть ли способ сохранить его живым прямо из /etc/init.d
?
В частности, у меня есть демон с именем dtnd with и бесконечный цикл, который ищет неожиданно завершенный процесс, если они есть, демон снова их разбудит. Кроме того, я использую инструмент start-stop-daemon, чтобы разрешить прецессию запускаться от данного системного пользователя.
Я хочу запустить этот демон dtnd из автозагрузки. Чтобы добиться такого поведения, я создал сценарий init.d, который «обертывает» файл dtnd с помощью команд start, stop и status.
У меня есть 2 вопроса, которые я хотел бы решить:
Есть ли способ добиться сохранение какого-то процесса из init.d сценарий оболочки. Это стандартный / лучший способ?
Рекомендуется поддерживать процесс с помощью бесконечного цикла? Думаю, лучше использовать какую-нибудь команду вроде 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