[Comm] RFC на модификацию SysV startup

ASA =?iso-8859-1?q?llb_=CE=C1_udm=2Eru?=
Пн Май 12 08:29:16 MSD 2003


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




Подробная информация о списке рассылки community