[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