On Mon, May 12, 2003 at 09:29:16AM +0500, ASA wrote: > 2) сэкономить время запуска компьютера за счет параллельного > выполнения нескольких сркиптов (главная цель по мнению > Дениса). Это не главная цель, это цель, ради достижения которой я вообще и подумал в первый раз о необходимости сделать подобную систему. Для многих зависимости скриптов друг от дурга гораздо более полезная фича. > Поле requires может встречаться (если вообще есть) один или > несколько раз и описывает т.н. жесткую зависимость скрипта от > успешного запуска других скриптов. Параметры requires > складываются по правилу AND, несколько requires OR'ятся. Приведёшь пример, где это действительно нужно (я про OR)? > Поле after может встречаться (если вообще есть) один или > несколько раз и описывает т.н. мягкую зависимость скрипта, то > есть указывает, после _просмотра_ или _попытки запуска_ какого > скрипта он должен запускаться Параметры after складываются по > правилу AND, несколько requires OR'ятся Может "просмотра" заменить на "попытку поиска"? > Если какое-то after-имя не встречается в других скриптах (имя > скрипта или поле provides), то он считается не запущенным. Эту фразу, честно говоря, я при первой прочтении даже не заметил :( > Поле provides встречается только один раз, и обеспечивает > альтернативное имя скрипта, которое может быть использовано в > полях requires и after. Полезно для случаев, когда могут быть > разные скрипты, обеспечивающие один и тот же сервис, например, в > системе могут быть установлены либо sendmail, либо exim, либо > postfix. Для всех них в скрипт пишется: > # provides mta Это _не_ альтернативное имя. Это именно 'provides'. То есть сервисы, которые предоставляются этим скриптом. Аналогично тому, как это может быть в RPM. Я бы даже разделил пространства имён пакетов и provides (добавив какой-нибудь символ в начало имён последних). Смысл у них ведь совершенно разный. Одно дело "мне нужен postfix", а другое дело "мне нужно некое средство доставки почты". > Допускается задание нескольких имен в одном provides, но сама > строка provides должна быть одна (если она вообще есть), А оно надо, это ограничение? IMHO если можно указывать несколько в одной строке, то разбор не сильно усложнится от того, что этих строк может быть больше. А иметь их больше позволит комментировать каждую. > а сами > имена не должны больше нигде повторяться (то есть не допускается > одновременное задание имени mta в двух и более рабочих скриптах, Скажем есть у нас postgres и mysql. Почему бы им обоим не provides sqlserver? > также не допускается совпадение имени какого-либо скрипта и > содержимого provides). Лучше разделить пространства имён. > Само имя скрипта (после отбрасывания начального SXX, и, при > необходимости, конечного .*sh) работает как неявный provides. Сложно отследить это будет, ой как сложно. А вот взбредёт кому-нибудь сделать скрипт mta, а он не знает что он уже где-то используется в качестве provides. Лучше делить пространства имён скриптов, и имён предоставляемых ими сервисов. > В "корневых" S-скриптах (т.е. таких, которые не зависят от > других) пишется > # requires none > чтобы запускающему скрипту (rc-скрипту) было понятно, что он > (S-скрипт) удовлетворяет вышеописанным требованиям. А может вообще без параметров? > Если в S-скрипте нет ни одного из всех трех полей (requires, > after, provides), то он считается не удовлетворяющим > вышеприведенным правилам, и rc-скрипт неявно задает для него > поле after, содержащее все скрипты, имеющие меньший запускной > номер, например, если мы имеем S25blabla без наших полей, то для > него будет неявно указано, что в after прописаны все скрипты от > S00 до S24. > Проблемы: переход на другой runlevel, в том числе останов? Каков сейчас алгоритм перехода на другой runlevel? Я не до конца себе его представляю. > Описание алгоритма запуска (в т.ч. лимит на число одновременно > запущенных скриптов) - Денису. Я, кажется, приводил его в одном из писем. Основная идея в том, что мы строим дерево очерёдности запуска (не зависимости, а именно очерёдности), после чего выбираем все скрипты, которые можно запустить сразу, и создаём очередь на исполнения. Из этой очереди скрипты уже и запускаются. После завершения скрипта (или попытки его запуска) мы смотрим на наше дерево, убираем из него наш скрипт, и модифицируем само дерево в зависимости от результата его выполнения и типа связей этого узла с другими (requires или after), после чего те скрипты, которые стало возможно запустить, отправляем в очередь. -- С уважением, Денис http://freesource.info