Синхронизация выполнения скриптов. (WAITFOR)

Dec 22, 2011 16:57

Представим, что нам надо исполнить в определенной последовательности некие действия на разных серверах.

Встречайте, команда WAITFOR


waitfor /?

Программа WaitFor имеет два режима работы.

Синтаксис 1: отправка сигнала
WAITFOR [/S система [/U пользователь [/P [пароль]]]] /SI сигнал

Синтаксис 2: ожидание сигнала
WAITFOR [/T время_ожидания] сигнал

Описание:
Эта служебная программа отправляет или ожидает сигнал в системе. Если не задан
параметр /S, сигнал будет отправлен на все системы в домене
Если задан параметр /S, сигнал будет отправлен только на
определенную систему.

Параметры:
/S <система> Удаленная система для отправки сигнала.

/U [<домен\>]<пользователь> Пользователь, от имени которого
будет выполняться эта команда.

/P [<пароль>] Пароль для контекста заданного пользователя.

/SI Отправка сигнала по сети ожидающим компьютерам

/T <время_ожидания> Количество секунд ожидания сигнала.
Допустимый диапазон: 1 - 99999.
По умолчанию время ожидания не ограничено.

<сигнал> Имя сигнала для ожидания или для отправки.

/? Вывод справки по использованию.

Примечание. Система может ожидать несколько сигналов с уникальным именами.
Имя сигнала не может иметь длину более 225 знаков и
может содержать только знаки, входящие в диапазоны a-z, A-Z, 0-9
и знаки ASCII из диапазона 128-255.

Примеры:
WAITFOR /?
WAITFOR SetupReady
WAITFOR CopyDone /T 100
WAITFOR /SI SetupReady
WAITFOR /S система /U пользователь /P пароль /SI CopyDone

Теперь попробуем выполнить на трех серверах некую последовательность действий. Все сервера находятся в одном сегменте сети.
Последовательность должна быть следующей.
S1 -> S2 -> S1 -> S3 -> S1 -> Все

создаем командные файлы
b1.cmd, b2.cmd, b3.cmd .... соответственно на 1,2 и 3 серверах

= b1.cmd = begin =
Некие действия
WAITFOR /SI s2_1
Отправляем сигнал действовать
и ожидаем исполнения на втором сервере
WAITFOR s2_ret
Выполняем ожидаемое действие
WAITFOR /SI s3_1
Ну и третьему отдаем действовать
и ждем возврата
WAITFOR s3_ret
Ну и всем по сети - свободны
WAITFOR /SI s_end
= b1.cmd = end ===

= b2.cmd = begin =
WAITFOR s2_1
Ждем сигнала s2_1
Выполняем ожидаемое действие
WAITFOR /SI s2_ret
Возвращаем вызвавшему
WAITFOR s_end
Ждем разрешения закончить.
= b2.cmd = end ===

= b3.cmd = begin =
WAITFOR s3_1
Ждем сигнала s3_1
Выполняем ожидаемое действие
WAITFOR /SI s3_ret
Возвращаем вызвавшему
WAITFOR s_end
Ждем разрешения закончить.
= b3.cmd = end ===

Вот так-то :)
Работаем :)


cmd, Компьютизмы, техническое, #Компьютер

Previous post Next post
Up