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