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: