From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Mon, 12 May 2003 09:29:16 +0500 From: ASA X-Mailer: The Bat! (v1.60q) Organization: LLB, LLC X-Priority: 3 (Normal) Message-ID: <1188331299.20030512092916@udm.ru> To: Alexander Bokovoy Denis Smirnov MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit Subject: [Comm] =?koi8-r?B?UkZDIM7BIM3PxMnGycvBw8nAIFN5c1Ygc3RhcnR1cA==?= Sender: community-admin@altlinux.ru Errors-To: community-admin@altlinux.ru X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: community@altlinux.ru X-Reply-To: ASA List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: Hello Alexander, Denis, Опишем предложенную модификацию SysV startup, преследующую две цели: 1) задать зависимости S-скриптов (т.е. расположенных в /etc/rc.d/init.d и управляемых черех симлинки в /etc/rc.d/rcX.d/) друг от друга (главная цель на мой взгляд) 2) сэкономить время запуска компьютера за счет параллельного выполнения нескольких сркиптов (главная цель по мнению Дениса). В начало S-скрипта добавляется от одного до нескольких полей любого трех типов: requires, after и provides. Поля добавляются тем же способом, как это сделано для chkconfig: <знак комментария><пробел><имя_поля><пробел><параметр1><пробел><параметр2>... Отсутствие всех полей (т.е. если ни одное не присутствует) обрабатывается специально (см. ниже). Поле requires может встречаться (если вообще есть) один или несколько раз и описывает т.н. жесткую зависимость скрипта от успешного запуска других скриптов. Параметры requires складываются по правилу AND, несколько requires OR'ятся. Пример: # requires network mta Скрипт запустится, только если успешно запустились оба network и mta Пример: # requires network # requires mta postgres Скрипт запустится, если был успешно запущен либо network, либо оба сервиса mta и postgres. Если какое-то requires-имя не встречается в других скриптах (имя скрипта или поле provides), то соотв. сервис считается не запущенным и сами поле requires блокирует запуск данного скрипта. Поле after может встречаться (если вообще есть) один или несколько раз и описывает т.н. мягкую зависимость скрипта, то есть указывает, после _просмотра_ или _попытки запуска_ какого скрипта он должен запускаться Параметры after складываются по правилу AND, несколько requires OR'ятся. Пример: # after network mta Скрипт запустится после попыток запуска как и network так и mta Пример: # after network # after mta Скрипт запустится после любого из network или mta. Комбинация requires и after: # requires network # after mta Скрипт запустится только после успешного поднятия network и попытки запуска mta. Если какое-то after-имя не встречается в других скриптах (имя скрипта или поле provides), то он считается не запущенным. Поле provides встречается только один раз, и обеспечивает альтернативное имя скрипта, которое может быть использовано в полях requires и after. Полезно для случаев, когда могут быть разные скрипты, обеспечивающие один и тот же сервис, например, в системе могут быть установлены либо sendmail, либо exim, либо postfix. Для всех них в скрипт пишется: # provides mta Последующие скрипты, котоые зависят от службы доставки писем, могут ссылаться на одно универсальное название mta вместо перечисления sendmail, exim, postfix в каждой строчке requires/after по отдельности Допускается задание нескольких имен в одном provides, но сама строка provides должна быть одна (если она вообще есть), а сами имена не должны больше нигде повторяться (то есть не допускается одновременное задание имени mta в двух и более рабочих скриптах, также не допускается совпадение имени какого-либо скрипта и содержимого provides). Само имя скрипта (после отбрасывания начального SXX, и, при необходимости, конечного .*sh) работает как неявный provides. В "корневых" S-скриптах (т.е. таких, которые не зависят от других) пишется # requires none чтобы запускающему скрипту (rc-скрипту) было понятно, что он (S-скрипт) удовлетворяет вышеописанным требованиям. Если в S-скрипте нет ни одного из всех трех полей (requires, after, provides), то он считается не удовлетворяющим вышеприведенным правилам, и rc-скрипт неявно задает для него поле after, содержащее все скрипты, имеющие меньший запускной номер, например, если мы имеем S25blabla без наших полей, то для него будет неявно указано, что в after прописаны все скрипты от S00 до S24. Проблемы: переход на другой runlevel, в том числе останов? Описание алгоритма запуска (в т.ч. лимит на число одновременно запущенных скриптов) - Денису. Рекомендуемые поля для скриптов, запускающих сетевые сервисы # requires netfs # after named или # requires mta # after named последовательность запуска основных сетевых сервисов: network, named, netfs, mta Я указываю на эту тонкость, т.к. первым побуждением мейтернера будет использовать network, а не netfs. Еще пример: в apache пишется: # after mysql postgres и др. СУБД Если перебросите в devel@, то просьба в обсуждениях cc: мне и Денису, т.к. мы не подписаны :) -- Best regards, ASA mailto:llb@udm.ru