[Comm] Re: [Comm]
Denis Smirnov
=?iso-8859-1?q?mithraen_=CE=C1_freesource=2Einfo?=
Вт Май 13 17:30:16 MSD 2003
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
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/community/attachments/20030513/1872459c/attachment-0004.bin>
Подробная информация о списке рассылки community