Я ищу стандартный способ или лучшую практику, чтобы поддерживать запуск демона с помощью 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]
.Также доступно несколько других опций для более сложных сценариев.
источник
systemd
Кажется,init.d
сценарий сброса и база на*.service
systemctl edit myservice
, затемsystemctl daemon-reload
и перезапустите myservice.Вы можете добавить его с
/etc/inittab
помощьюrespawn
:Это грязный хак, но я успешно использовал его в прошлом на старых системах sysv-init.
источник
Ну, это одна из главных причин, почему Debian переходит на systemd.
sysvinit (/etc/init.d) не может определить, не работает ли служба или не отвечает. Это означает, что вы должны отслеживать эти службы и расширяться, если служба больше не выполняет свою работу.
вероятно, проще всего было бы выполнить миграцию на другой демон-обработчик, такой как systemd (по умолчанию в RHEL7, будет по умолчанию в следующем Debian и Ubuntu lts), upstart (по умолчанию в RHEL6, Ubuntu 12.04 и 14.04), daemontools (как упомянуто, разработано с помощью DJB) или что-то еще.
работа по поддержанию сервиса будет PITA в sysvinit.
источник
Лучшая практика - убедиться, что ваши демоны НЕ ОСТАНАВЛИВАЮТСЯ в первую очередь.
В противном случае вы можете захотеть взглянуть на Djb в DaemonTools
источник
Стандартный подход для меня - использовать для этого утилиту Monit .
Из вашего описания я не могу точно сказать, написали ли вы что-то вроде Monit и пытаетесь убедиться, что он работает, или вам нужно что-то, чтобы посмотреть созданного вами демона.
источник