[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: "Правильные" демоны - не демоны?



Alexander Galanin -> debian-russian@lists.debian.org  @ Mon, 14 Sep 2009 11:53:22 +0400:

 >>  AG> Потому уточняю формулировку требования: честно попытаться всё запустить
 >>  AG> перед приглашением войти в систему, чтобы не создалось ситуации, когда я
 >>  AG> уже залогинился, а nfs всё ещё не смонтирован.
 >> 
 >> То есть если у тебя тот конец лежит, то твоя машина не должна тебе дать
 >> возможности залогиниться.  Тогда событийная модель к твоим услугам.

 AG> Да, не должна. Хотя бы потому что у меня /home может быть на nfs.

Силен...  Типа home, может быть, на NFS, а может быть, и нет.  Но если
NFS не смонтировалась, то возможности залогиниться и починить быть не
должно...  Даже если (в случае "может быть, и нет") она вообще-то и не
нужна...

 >> Именно событийная, а не sysvinit.

 AG> Так, это уже похоже на обоснование необходимости событийной модели.
 AG> То есть если система каким-либо образом узнает, что nfs-сервер умер
 AG> и больше не оживёт, то она должна поубивать все демоны, зависимые
 AG> от него, в том числе и мою логин-сессию?

Поубивать - вряд ли.  Сами вымрут, если надо.  А вот стартовать их, пока
сети нету, действительно не стоит.

 >>  AG> То, что конкретный демон и конкретный его инит-скрипт завершились
 >>  AG> до того, как им стало возможно пользоваться --- проблема
 >>  AG> исключительно этого демона. И к init-у это мало относится.
 >> 
 >> Твоими бы устами да медку хряпнуть.  Таковы 9 демонов из 10.

 AG> Примем это за начальные условия. В обоих случаях: при проверке
 AG> пререквизитов в параллельной инициализации и при проверке готовности
 AG> сервиса к работе (в последовательной), - будет работать, очевидно,
 AG> одинаковый код. Так какая разница?

Разницу я уже описывал.  Когда имеют в голове событийную, а не
последовательную модель, по модели "форкнул и забыл" действуют, гм, не в
каждом первом случае.  Во всяком случае, уже не будут надеяться на "пока
еще до старта зависимых скриптов дойдет дело..."  Просто помнят о том, о
чем при якобы последовательной инициализации мысль в голову не приходит.

 >>  AG> У pppd, к примеру, есть на такой случай замечательная опция
 >>  AG> updetach.  Или вот ещё ifupdown, который не завершается, пока не
 >>  AG> получит адрес по dhcp.
 >> 
 >> ... в то время как мне сеть для логина нафиг не нужна, а нужна как раз
 >> после - ибо нифига тут DHCP не дают, и чтобы ее получить, надо ручками
 >> адрес прописать.  Ну и на кой?

 AG> Тебе, может, и не нужна, а другому понадобится.

Вот пусть этот другой и пропишет себе зависимость от сети.  Благо
инит-скрипты у нас по полиси относятся к конфигам.

 AG> Более того, предвижу ситуацию, когда тебе для логина потребуется
 AG> только один интерфейс из десяти и только две из пяти файловых
 AG> систем.

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

 AG> Причём наверняка появятся желающие распарсить руками конфиг
 AG> соответствующего демона, чтобы выяснить, а какие же ему интерфейсы
 AG> нужны.

Вряд ли.  Народ ленив.

 >>  AG> И не стоит забывать, что мантайнеры не всегда добросовестные и не
 >>  AG> всегда компетентные, чтобы отследить и проверить все
 >>  AG> пререквизиты. В качестве примера того уровня, на котором находится
 >>  AG> продумывание инит-скриптов, могу указать то, что для thttpd и
 >>  AG> ejabberd на команду stop демон вообще не убивался (не знаю, как
 >>  AG> сейчас обстоят дела).
 >> 
 >> Ты не выкручивайся.  Ты покажи, чем тут последовательная загрузка лучше
 >> параллельной.  В параллельной ты, если обнаружил, что мейнтейнер забыл

 AG> Она понятней и проще для отладки.

Есть большие сомнения.  Последовательная модель понятней и проще только
тогда, когда последовательна вся архитектура.

 >> пререквизит, сам его вписываешь, и тебе ура.  А в последовательной?
 >> Танцы с бубном вокруг числа после буковки S?  Или от того, что загрузка

 AG> Впишу пререквизит в зависимость, запущу insserv и он поправит мне
 AG> число после буковки, попутно сделав минимальную проверку
 AG> правильности зависимостей. Разумеется, это в теории, т.к. в моих
 AG> тепличных условиях и проблем, которые мы тут обсуждаем, я не
 AG> встречал.

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

 >> последовательная, мейнтейнер сразу станет на порядок ответственнее и
 >> будет эти танцы танцевать сам?  Так ты ж сам контрпримеры приводишь...

 AG> Я привожу примеры того, как может мантейнер "накосячить". Исходя из
 AG> этого, надо давать ему меньше мест для косяков. Логично вроде.

Да столько же их у него.

 >>  AG> Не многовато ли пререквизитов проверять придётся? Пример: в скрипте
 >>  AG> для запуска экзима надо будет проверять, смонтировался ли
 >>  AG> /var/spool, который может быть на nfs-е, поднялись ли сетевые
 >>  AG> интерфейсы из конфига и т.д.
 >> 
 >> Ты туда хоть заглядывал, в этот инит-скрипт экзима?
 >> Он мало того, что проверяет все, что ты сказал - он еще и проверяет то,
 >> что ты забыл...

 AG> Посыпаю голову пеплом. Но к тому же экзиму можно добавить в
 AG> пререквизиты также и то, запущен ли spamd. Причём только в случае,
 AG> если установлен sa-exim.

Нафига?  Это гораздо проще проделывается в его конфиге (и я подозреваю,
что родной конфиг от оного sa-exim на эту тему куда более вменяем, чем
твое предложение, которое заодно и почту от крона доставлять не будет).

 >> Ты эта...  Не мешай одно с другим.  Если у тебя драйвер сканера
 >> неправильно подгрузился, то у тебя загрузка не встанет.  У тебя,
 >> может быть, не загрузится saned.  И даже если он не загрузится
 >> настолько неудачно, что зависнет, не реагируя на сигналы - или
 >> реагируя, но на машинке без клавиатуры и монитора - это в sysvinit у
 >> тебя будут проблемы, а в параллельной модели они откуда возьмутся?

 AG> Пардон, а у нас ядро уже научилось грузить кривые драйвера не
 AG> повисая?  Чем мне поможет upstart, если у меня ядро замерло?

Если инит-скрипты перестанут гадить в консоль, то в момент замирания
ядра у тебя на экране будет вся релевантная информация.  В остальном
sysvinit от upstart тут ничем не отличается - если ядро замерло, то
продолжить работу не сможет ни тот, ни другой.

-- 
Весь юникс для того и был придуман, чтобы PS в принтер выплевывать.
	Alex Korchmar в <a63nn3$ef7$1@alx.private>


Reply to: