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

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



On Sun, 13 Sep 2009 22:35:09 +0400
Artem Chuprina <ran@ran.pp.ru> wrote:

> Alexander Galanin -> debian-russian@lists.debian.org  @ Sun, 13 Sep 2009 19:01:50 +0400:
> 
>  AG> sysvinit даёт мне гарантию, что он честно попытается запустить все
>  AG> скрипты
> 
> В это верю...
> 
>  AG> и внятно обругается в консоль, если что пошло не так.
> 
> ... а в это - нет.  Ты посмотри на любой процесс загрузки с ошибками.  И
> попробуй потом найти там ошибку, ага...  Выкинутую наивным скриптом
> в stderr, а не в сислог или хотя бы dmesg.

Согласен, тут всё плохо. Поэтому я себе в груб vga=ext дописал, чтобы
увидеть больше сообщений в случае чего.
Но когда эта ругань валится между "Starting foo..." и "done", сразу
понятно, где искать. А если из 10 запущенный скриптов кто-то вывалит
"[: 5: =: unexpected operator", будет гораздо сложнее.

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

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

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

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

> А вот если ради удовлетворения твоих закидонов оно так станет вести себя
> _у меня_ - вот тут-то я и начну искать способ пришибить тебя и сделать
> по-человечески...

Да что ты мне всё телесными наказаниями угрожаешь? :)
Давай найдём формулировку, которая устроит нас обоих. Например, "иметь
возможность указать системе, что именно обязано быть у меня запущено и
полностью инициализировано, когда мне предложат залогиниться". Вполне
вписывается и в мои "закидоны" и в твои "не хочу ждать, пока поднимется
nfs".

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-- 
Alexander Galanin


Reply to: