Альтернатива Daemontools (djbtools) для контроля процессов Unix?

26

Я использовал Daemontools, чтобы предоставить простой и надежный способ контроля сервисов Unix на моих серверах. Это работает хорошо, но требует другого мышления ( The DJB Way ), и некоторые распространенные жалобы:

  • Временные метки на основе TAI64N
  • Не хранит скрипты в /etc/init.d (или (/usr/local)/etc/rc.d)
  • Не всегда работает с такими скриптами, как apachectl. Некоторые сценарии необходимо переписать.

Я помню, что некоторые похожие демоны «supervisor / watchdog» были в работе около двух лет назад, но некоторые все еще были немного грубыми по краям.

Если вы перешли с Daemontools на что-то другое, что вы выбрали и хорошо ли это сработало для вас? RedHat или Ubuntu поставляются с какими-либо утилитами супервизора процессов по умолчанию?

Стефан Ласевский
источник

Ответы:

16

Хм, если вы используете Ubuntu, их новый процесс инициализации, upstart , включает в себя уровень контроля процесса. Он может использоваться для стандартного запуска и остановки служб, как сценарии инициализации SysV, а также может отслеживать запущенные приложения и вызывать их, если они умирают.

Вы также можете реализовать перезапуск процесса для бедного человека через inittab, в зависимости от ваших потребностей.

Если вы в первую очередь ищете что-то, чтобы следить за процессом, чтобы убедиться, что он всегда запущен, а затем перезапустить его, когда это не так, мне очень повезло с рестартом . К сожалению, единственный известный мне источник - это пакет Debian. Однако это очень маленькое и простое приложение, в основном просто один файл .c и .h, с файлом make. Компилировать его из исходного архива Debian в Red Hat тривиально (я даже сделал его RPM на своей предыдущей работе).

Последний вариант, о котором я слышал, но не использовал, это Supervisor . Это выглядит как многообещающий инструмент, но рестарт работал достаточно хорошо для меня в прошлом, для того, что мне было нужно, что я еще не удосужился поиграть с ним.

Кристофер Кашелл
источник
12

+1 за рунит. Больше возможностей и гибкость, чем у daemontools, совместимых с существующими аргументами и опциями daemontools. Довольно аккуратно.

Но, как вы упомянули, многие инструменты поставляются со своими собственными двоичными файлами управления, apache2ctl, ejabberdctl, poundctl, collectd и т. Д. И хотя хаки существуют, иногда просто лучше придерживаться поставляемых инструментов, в основном, когда вы не уверены в чистоте возможная реализация. Я обычно иду на компромисс, и большинство служб работают под наблюдением Рунита. А другим разрешено бегать тривиальным способом.

alcy
источник
1
+1 Стоит отметить, что runsvкоманда from runitподдерживает пользовательские элементы управления, поэтому перезапуск может быть реализован в терминах собственных двоичных элементов управления демона.
Пилкроу
4

Ну, есть рунит . Я не могу сказать вам, в чем его отличие и сходство с daemontools, но, судя по веб-сайту Berstein-esque, я бы сказал, что есть определенное влияние Бернштейна.

Стивен Понедельник
источник
2
Мой голос за runit, учитывая, что вы можете поместить его в соглашение SysVInit и сделать так, чтобы он принял /etc/init.d/ <scriptname> довольно прозрачно.
Эйвери Пэйн
4

В качестве альтернативы уже упоминавшемуся daemonizeи daemontools, есть команда daemon пакета libslack.

daemon вполне настраивается и заботится обо всех утомительных вещах демона, таких как автоматический перезапуск, ведение журнала или обработка pidfile.

nazu
источник
3

Есть также инструмент- демон libslack, написанный на C и доступный для различных (Unix) платформ.

Он достаточно настраивается и заботится обо всех утомительных вещах демона, таких как автоматический перезапуск, ведение журнала или обработка pidfile.

Чад
источник
2

Ubuntu поставляется с Upstart - я мало что знаю об этом, но знаю, что у него есть возможности «супервизора». Apple, запуск программ является еще одним вариантом (что Википедия статья имеет хороший «Смотри также» раздел , который перечисляет кучу других тоже, в том числе и Upstart RunIt).

У всех них есть свои плюсы и свой особый бренд übersuck - всякий раз, когда кто-то спрашивает меня о программах «супервизор процесса» / «сторожевой пес», я всегда задаю один и тот же вопрос: зачем он вам нужен?

voretaq7
источник
-2

Для этого нет популярных / общедоступных инструментов для достижения консенсуса, потому что каждый, кто идет этим путем, понимает, что это тупик. Если ваши долго выполняющиеся процессы слишком часто терпят неудачу, чтобы простой мониторинг был достаточно хорошим, прекратите их использовать и поместите свой код в нечто, что будет в большей степени зависеть от событий.

редактировать: как указывает Крис ниже, иногда вы полностью загнаны в угол, и в этом случае задание * / 1 cron, которое ищет файл процесса / pidfile, запускает запуск / перезапуск, если его не хватает, и выводит результаты в электронном письме ответственному лицу. Разработчик / продукт-менеджер - это ваша запасная позиция.

cagenut
источник
3
Проще сказать, чем сделать. ;-) Иногда у вас есть приложения, которые вы вынуждены запускать, независимо от того, насколько нестабильными или дрянными они могут быть, и все, что вы можете сделать, чтобы они работали, поможет уменьшить количество звонков в 3 часа ночи. Не идеал, во всяком случае, но иногда он так хорош, как может.
Кристофер Кашелл
1
В этом ответе упускаются две особенности супервизоров процессоров: способность управлять группами процессов как единым целым и возможность управлять зависимостями. Например, ваш веб-сайт может включать веб-сервер, сервер базы данных и несколько веб-приложений, работающих как внешние процессы. Эти процессы могут иметь зависимости - например, база данных должна быть запущена до веб-приложения. Хороший супервизор процессов позволит вам запускать и останавливать эту группу процессов с помощью одной команды и следить за тем, чтобы все запускалось в правильном порядке.
Жаворонки
1
В идеальном мире все было бы просто идеально. К сожалению, это просто не идеальный мир.
Мэтт
Проблема не часто выходит из строя. Проблема терпит неудачу один раз в неделю и не перезапускается немедленно . Это не настоящий ответ.
Дан3
@ChristopherCashell находится на правильном пути. Надзор внутри приложения, как правило, чрезмерно сложен (и это также не философия UNIX). Предполагается, что программное обеспечение всегда несовершенно, независимо от того, сколько усилий предпринято для исправления каждого сбоя. Надзор - это отдельный внешний слой ... страховой полис. Лучше поддерживать производственные сервисы, несмотря ни на что, даже если они «не должны рухнуть», потому что реальность такова. Я предпочел бы перезапустить сервис, зарегистрировать исключение и исправить его утром. (Еще один случай, который нужно рассмотреть,