Re: [Comm] Re:

Denis Smirnov
1970-01-01T00:00:02Z

[-- Attachment #1: Type: text/plain, Size: 2946 bytes --]

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

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]