[Comm] Re:

Denis Smirnov =?iso-8859-1?q?mithraen_=CE=C1_freesource=2Einfo?=
Сб Май 10 19:56:44 MSD 2003


On Sat, May 10, 2003 at 01:15:04PM +0500, ASA wrote:

> DS> В какой момент должен запускаться скрипт, если для него ничего не указано?
> DS> Считать его зависимых от всех предыдущих по номеру?
> Видимо, так.
> Кстати, в RH и Debian есть вехи. Что-то типа - после S20 поднята
> сеть, после S40 смонтированы все файловые системы.

Хорошо бы это сделать в виде групп. То есть в качестве зависимости можно
указывать не только сервис, но и имя группы, при этом каждый сервис может
входить в какие-либо группы. Логику это почти не усложнит (всё равно ведь
развернутся эти группы в зависимости от конкретных пакетов), зато жизнь
мейнтейнерам облегчит.

 > DS>  > seek  test  ;). Пример - в той же вынде выделите побольше иконок
 > DS>  > на  рабочем  столе  и  нажмите  Enter  ;)  Поэтому  можно ввести
 > DS>  > ограничение на одновременную работу не более 4*CPU скриптов враз.
 > DS> Это конфигурируемо должно быть. По-умолчанию 4*CPU -- оптимум.
 > Главное - не забыть об этом.

Угу. Хотя так как запускалка должна отслеживать результат выполнения
каждого скрипта, то для добавления ограничения по количеству работающих
процессов почти ничего писать не нужно. 
 
 > DS>  > DS>  > отдельно   от  других  подобных  ему.  И  тут  может  возникнуть
 > DS>  > DS>  > нетривиальная  задача  развязки  обязательных  и  необязательных
 > DS>  > DS>  > зависимостей.
 > DS>  > DS> А в чём собственно её нетривиальность? Автор пакета должен суметь чётко
 > DS>  > DS> сформулировать что необходимо его сервису для работы.
 > DS>  > Нетривиальность вообще в создании такого дерева.
 > DS> В смысле в создании дерева по меткам, или в проставлении меток
 > DS> зависимости?
 > Если скрипт 3 связан нежесткой зависимостью со скриптом 2,
 > который не стартовал, потому что он жестко связан со скриптом 1,
 > выдавшим FAILED.

То 3-й скрипт стартует.

Упрощённо алгоритм такой -- строится дерево. После этого создаётся список
узлов, у которых нет зависимостей. Из этого списка выбираются имена
скриптов для старта. После того, как скрипт завершит свою работу (с
каким-либо кодом завершения) смотрим на узел-родитель, и смотрим на тип
связи. В зависимости от результата выполнения скрипта, типа связи, наличия
других невыполненых зависимостей родителя либо ничего не делаем с
родителем, либо переносим его в список узлов готовых к выполнению. При
этом если FAILED скрипт, зависимость которого с родителем прямая, то
тогда родителю выставляется флаг FAILED, и, когда придёт время его
переноса в очередь для выполнения мы просто выдаём что он и не будет
выполняться.
 
 > DS> Нужно чтобы всё работало даже для тех программ, которые об этой фиче не
 > DS> знают. Если действительно сделать зависимостями по-умолчанию "все
 > DS> предыдущие скрипты в списке", то действительно будет всё работать.
 > Именно поэтому сами скрипты должни связываться реализоваться
 > только через теги-комментарии а-ля chkconfig.

Согласен.
 
-- 
С уважением, Денис

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/20030510/dc0036b9/attachment-0004.bin>


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