Scheduler
Планировщик задач; позволяет выполнять команды по расписанию или при старте сервера.
Шаблон Scheduler
<Scheduler>
<Task Name="">
<Condition Type="Values">
<Month></Month>
<Day><Day>
<Hour></Hour>
<Minute></Minute>
<Second></Second>
</Condition>
<Commands StopOnError="">
<Command Name="" />
<Command Name="">
<Parameter Name="" />
<Parameter Name="" />
</Commands>
<If>
<When></When>
<Then StopOnError="">
<Command Name="" />
</Then>
<ElseIf>
<When></When>
<Then StopOnError="">
<Command Name="">
<Parameter Name="" />
<Parameter Name="" />
</Command>
</Then>
</ElseIf>
<Else StopOnError="">
<Command Name="" />
</Else>
</If>
</Commands>
<ExecutionStrategy></ExecutionStrategy>
</Task>
<Task Name="">
<Condition Type="Query">
<Text></Text>
</Condition>
<Commands>
<Command Name="" />
</Commands>
<ExecutionStrategy></ExecutionStrategy>
</Task>
<Task Name="">
<Condition Type="OnStart" />
<Commands>
<Command Name="" />
</Commands>
<ExecutionStrategy></ExecutionStrategy>
</Task>
</Scheduler>
Описание Task
<Task Name="TaskName">
<!--Тэги, специфичные для Task-->
</Task>
Атрибуты Task
Name
Название условия.
Обязательный атрибут.
Тэги, специфичные для Task
Condition
Условие, которое используется для запуска задач.
<Condition Type="" />
Атрибуты тэга <Condition>
<Condition>
Commands
Список команд, которые будут выполнены последовательно.
Обязательный тэг. В качестве значения тэга ожидается список тэгов <Command>
и/или конструкций <If>
.
<Commands StopOnError="True">
<Command Name="CommandName1" />
<Command Name="CommandName2">
<Parameter Name="ParameterName1">parameter 1</Parameter>
<Parameter Name="ParameterName2">parameter 2</Parameter>
</Command>
<If>
<When></When>
<Then StopOnError="True">
<Command Name="CommandName3">
<Parameter Name="ParameterName1">parameter 1</Parameter>
<Parameter Name="ParameterName2">parameter 2</Parameter>
</Command>
</Then>
<ElseIf>
<When></When>
<Then StopOnError="True">
<Command Name="CommandName4" />
</Then>
</ElseIf>
<Else StopOnError="True">
<Command Name="CommandName5" />
</Else>
</If>
</Commands>
Тэг <Command>
<Command>
Обращение к команде по имени для ее выполнения.
Необязательный тэг. В качестве значения тэга ожидается список тэгов <Parameter>
.
<!--Вариант 1-->
<Command Name="CommandName1" />
<!--Вариант 2-->
<Command Name="CommandName2">
<Parameter Name="ParameterName1">parameter 1</Parameter>
<Parameter Name="ParameterName2">parameter 2</Parameter>
</Command>
Тэг <Parameter>
<Parameter>
Дополнительный параметр, который будет передан в команду при выполнении.
Необязательный тэг. Значение тэга <Parameter>
: любое значение.
Атрибуты тэга <Parameter>
<Parameter>
Name
Имя входящего значения.
Ожидается имя одного из параметров, передаваемых в команду.
ExecutionStrategy
Признак, определяющий как будет выполняться задача, если пропущено плановое время запуска.
Если тэг отсутствует, то используется значение ExecuteMissed.
Необязательный тэг. Ожидается одно из следующих значений:
ExecuteMissed
Будут запущены все пропущенные задания согласно условиям. Учитывается время последнего выполнения задачи. Если задача ранее не выполнялась, т.е. в таблице public.schedule в базе данных отсутствует запись, то будет выполнен только один пропущенный вызов.
ExecuteLastMissed
Будет запущено последнее пропущенное задание, а далее согласно условиям
WaitNext
Задача запускается в следующее плановое время
Restart
Задача будет перезапущена с текущим временем
RestartAndWaitNext
Задача будет перезапущена с текущим временем и запущена при следующем плановом запуске
<ExecutionStrategy>ExecuteMissed</ExecutionStrategy>
Пример
Задача выполняется каждые 5 минут. Текущее время 11:28. Последнее выполнение задачи было в 11:00.
При стратегии ExecuteMissed задача будет выполнена 11:05, 11:10, 11:15, 11:20, 11:25, 11:30, 11:35 и т.д.
При стратегии ExecuteLastMissed - 11:25, 11:30, 11:35 и т.д.
При стратегии WaitNext - 11:30, 11:35 и т.д.
При стратегии Restart - 11:28, 11:33, 11:38 и т.д.
При стратегии RestartAndWaitNext - 11:33, 11:38 и т.д.
Тэги, специфичные для условия Values
<Condition Type="Values">
<Month></Month>
<Day><Day>
<Hour></Hour>
<Minute></Minute>
<Second></Second>
</Condition>
Condition
Условие, которое используется для запуска задач по расписанию.
Значение тэга <Condition>
: список тэгов <Month>
, <Day>
, <Hour>
, <Minute>
и <Second>
.
Условие запуска задаётся в одном из описанных форматов:
Пустое поле - ближайшее значение из интервала возможных значений. Например, для дней месяца - это значения от 1 до 31.
\d+(,\d+){0,} - точные значения. Например, 1,5,9 будет выполняться в январе, мае, сентябре.
\d+-\d+ - интервал значений. Например, 1-9 будет выполняться с января по сентябрь.
/\d+ - повтор через указанный интервал времени. Например, /2 будет повторяться каждые 2 месяца, начиная с текущего.
\d+/\d+ - повтор через указанный интервал времени, начиная с указанного значения. Например, 3/2 - будет повторяться каждые 2 месяца, начиная с марта и до конца года. В следующем году первый раз снова выполнится в марте.
\d+-\d+/\d+ - повтор через указанный интервал времени в указанном интервале значений. Например, 3-9/2 - будет повторяться каждые 2 месяца, начиная с марта и по сентябрь включительно. В следующем году первый раз снова выполнится в марте.
Тэг <Month>
<Month>
Задаёт месяц, в котором должно выполняться задание.
Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.
Тэг <Day>
<Day>
Задаёт дни, в которых должно выполняться задание.
Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.
Тэг <Hour>
<Hour>
Задаёт часы, в которые должно выполняться задание.
Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.
Тэг <Minute>
<Minute>
Задаёт минуты, в которые должно выполняться задание.
Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.
Тэг <Second>
<Second>
Задаёт секунды, в которые должно выполняться задание.
Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.
Пример 1
Запускает задание в начале каждой минуты:
<Condition Type="Values">
<Second>0</Second>
</Condition>
Пример 2
Запускает задание каждые 5 минут каждый день, но не в начале минуты, а начиная с момента первого запуска:
<Condition Type="Values">
<Minute>/5</Minute>
</Condition>
Пример 3
Запускает задание с 8:00 до 21:59 каждые 5 минут (в начале минуты) каждый день:
<Condition Type="Values">
<Hour>8-21</Hour>
<Minute>0/5</Minute>
</Condition>
Пример 4
Запустит задание в 7:15:19 4 февраля:
<Condition Type="Values">
<Month>2</Month>
<Day>4</Day>
<Hour>7</Hour>
<Minute>15</Minute>
<Second>19</Second>
</Condition>
Тэги, специфичные для условия Query
<Condition Type="Query">
<Text>
SELECT 1 AS "Month"
FROM table
</Text>
</Condition>
Condition
Условие используется для запуска задач по расписанию с динамическим заданием условия запуска через базу данных.
Значение тэга <Condition>
: тэг <Text>
.
Тэг <Text>
<Text>
Содержит sql-запрос для получения условия запуска.
Обязательный тэг. Значение тэга <Text>
: текст sql-запроса.
Sql-запрос должен вернуть хотя бы один столбец с именем из списка: Month, Day, Hour, Minute, Second.
Формат значений столбцов описан в условии Values.
Тэги, специфичные для условия OnStart
<Condition Type="OnStart" />
Condition
Условие используется для запуска задач при старте сервера.
Значение тэга <Condition>
: не ожидается.
Last updated