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>

Type

Тип условия.

Обязательный атрибут. Ожидается имя одного из типов условий: Values, Query или OnStart.

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>

Обращение к команде по имени для ее выполнения.

Необязательный тэг. В качестве значения тэга ожидается список тэгов <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>

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>

Задаёт месяц, в котором должно выполняться задание.

Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.

Тэг <Day>

Задаёт дни, в которых должно выполняться задание.

Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.

Тэг <Hour>

Задаёт часы, в которые должно выполняться задание.

Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.

Тэг <Minute>

Задаёт минуты, в которые должно выполняться задание.

Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.

Тэг <Second>

Задаёт секунды, в которые должно выполняться задание.

Необязательный тэг. Ожидается строка, заданная по одному из форматов запуска.

Пример 1

Запускает задание в начале каждой минуты:

<Condition Type="Values">
    <Second>0</Second>
</Condition>

Пример 2

Запускает задание каждую минуту, но не в начале минуты, а начиная с момента первого запуска:

<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>

Содержит sql-запрос для получения условия запуска.

Обязательный тэг. Значение тэга <Text>: текст sql-запроса.

Sql-запрос должен вернуть хотя бы один столбец с именем из списка: Month, Day, Hour, Minute, Second.

Формат значений столбцов описан в условии Values.

Тэги, специфичные для условия OnStart

<Condition Type="OnStart" />

Condition

Условие используется для запуска задач при старте сервера.

Значение тэга <Condition>: не ожидается.

Last updated