# Scheduler

## Шаблон Scheduler <a href="#template_sheduler" id="template_sheduler"></a>

```xml
<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 <a href="#descpription_task" id="descpription_task"></a>

```xml
<Task Name="TaskName">
  <!--Тэги, специфичные для Task-->
</Task>
```

#### Атрибуты Task <a href="#attributes_task" id="attributes_task"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="431.3333333333333"></th></tr></thead><tbody><tr><td align="center">Name</td><td><p>Название условия.</p><p></p><p>Обязательный атрибут.</p></td></tr></tbody></table>

## Тэги, специфичные для Task <a href="#tags_task" id="tags_task"></a>

### Condition <a href="#condition" id="condition"></a>

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

```xml
<Condition Type="" />
```

#### Атрибуты тэга `<Condition>` <a href="#attributes_tag_condition" id="attributes_tag_condition"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="454.3333333333333"></th></tr></thead><tbody><tr><td align="center">Type</td><td><p>Тип условия. </p><p></p><p>Обязательный атрибут. Ожидается имя одного из типов условий: <a href="#tags_condition_values">Values</a>, <a href="#tags_condition_query">Query</a> или <a href="#tags_condition_on_start">OnStart</a>.</p></td></tr></tbody></table>

### Commands <a href="#commands" id="commands"></a>

Список команд, которые будут выполнены последовательно.

Обязательный тэг. В качестве значения тэга ожидается список тэгов [`<Command>`](#commands_command) и/или конструкций [`<If>`](broken://pages/iVtWjDead7feCDAh6QlW#teg-less-than-if-greater-than).

```xml
<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>` <a href="#commands_command" id="commands_command"></a>

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

Необязательный тэг. В качестве значения тэга ожидается список тэгов [`<Parameter>`](#commands_command_parameter).

```xml
<!--Вариант 1-->
<Command Name="CommandName1" />

<!--Вариант 2-->
  <Command Name="CommandName2">
    <Parameter Name="ParameterName1">parameter 1</Parameter>
    <Parameter Name="ParameterName2">parameter 2</Parameter>
  </Command>
```

#### Тэг `<Parameter>` <a href="#commands_command_parameter" id="commands_command_parameter"></a>

Дополнительный параметр, который будет передан в команду при выполнении.

Необязательный тэг. Значение тэга `<Parameter>`: любое значение.

#### Атрибуты тэга `<Parameter>` <a href="#attributes_tag_commands_command_parameter" id="attributes_tag_commands_command_parameter"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="454.3333333333333"></th></tr></thead><tbody><tr><td align="center">Name</td><td><p>Имя входящего значения. </p><p></p><p>Ожидается имя одного из параметров, передаваемых в команду.</p></td></tr></tbody></table>

### ExecutionStrategy <a href="#execution_strategy" id="execution_strategy"></a>

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

Если тэг отсутствует, то используется значение ExecuteMissed.

Необязательный тэг. Ожидается одно из следующих значений:

<table data-header-hidden><thead><tr><th align="center"></th><th width="431.3333333333333"></th></tr></thead><tbody><tr><td align="center">ExecuteMissed</td><td>Будут запущены все пропущенные задания согласно условиям. Учитывается время последнего выполнения задачи. Если задача ранее не выполнялась, т.е. в таблице public.schedule в базе данных отсутствует запись, то будет выполнен только один пропущенный вызов.</td></tr><tr><td align="center">ExecuteLastMissed</td><td>Будет запущено последнее пропущенное задание, а далее согласно условиям</td></tr><tr><td align="center">WaitNext</td><td>Задача запускается в следующее плановое время</td></tr><tr><td align="center">Restart</td><td>Задача будет перезапущена с текущим временем</td></tr><tr><td align="center">RestartAndWaitNext</td><td>Задача будет перезапущена с текущим временем и запущена при следующем плановом запуске</td></tr></tbody></table>

```xml
<ExecutionStrategy>ExecuteMissed</ExecutionStrategy>
```

#### Пример <a href="#execution_strategy_example" id="execution_strategy_example"></a>

Задача выполняется каждые 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 <a href="#tags_condition_values" id="tags_condition_values"></a>

```xml
<Condition Type="Values">
  <Month></Month>
  <Day><Day>
  <Hour></Hour>
  <Minute></Minute>
  <Second></Second>
</Condition>
```

### Condition <a href="#condition_values_condition" id="condition_values_condition"></a>

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

Значение тэга `<Condition>`: список тэгов [`<Month>`](#condition_values_condition_month), [`<Day>`](#condition_values_condition_day), [`<Hour>`](#condition_values_condition_hour), [`<Minute>`](#condition_values_condition_minute) и [`<Second>`](#condition_values_condition_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>` <a href="#condition_values_condition_month" id="condition_values_condition_month"></a>

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

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

#### Тэг `<Day>` <a href="#condition_values_condition_day" id="condition_values_condition_day"></a>

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

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

#### Тэг `<Hour>` <a href="#condition_values_condition_hour" id="condition_values_condition_hour"></a>

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

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

#### Тэг `<Minute>` <a href="#condition_values_condition_minute" id="condition_values_condition_minute"></a>

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

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

#### Тэг `<Second>` <a href="#condition_values_condition_second" id="condition_values_condition_second"></a>

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

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

#### Пример 1 <a href="#condition_values_example_1" id="condition_values_example_1"></a>

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

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

#### Пример 2 <a href="#condition_values_example_2" id="condition_values_example_2"></a>

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

```xml
<Condition Type="Values">
    <Minute>/5</Minute>
</Condition>
```

#### Пример 3 <a href="#condition_values_example_3" id="condition_values_example_3"></a>

Запускает задание с 8:00 до 21:59 каждые 5 минут (в начале минуты) каждый день:

```xml
<Condition Type="Values">
    <Hour>8-21</Hour>
    <Minute>0/5</Minute>
</Condition>
```

#### Пример 4 <a href="#condition_values_example_4" id="condition_values_example_4"></a>

Запустит задание в 7:15:19 4 февраля:

```xml
<Condition Type="Values">
    <Month>2</Month>
    <Day>4</Day>
    <Hour>7</Hour>
    <Minute>15</Minute>
    <Second>19</Second>
</Condition>
```

## Тэги, специфичные для условия Query <a href="#tags_condition_query" id="tags_condition_query"></a>

```xml
<Condition Type="Query">
  <Text>
    SELECT 1 AS "Month"
    FROM table
  </Text>
</Condition>
```

### Condition <a href="#condition_query_condition" id="condition_query_condition"></a>

Условие используется для запуска задач по расписанию с динамическим заданием условия запуска через базу данных.

Значение тэга `<Condition>`: тэг [`<Text>`](#condition_query_condition_text).

#### Тэг `<Text>` <a href="#condition_query_condition_text" id="condition_query_condition_text"></a>

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

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

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

Формат значений столбцов описан в условии [Values](#tags_condition_values).

## Тэги, специфичные для условия OnStart <a href="#tags_condition_on_start" id="tags_condition_on_start"></a>

```xml
<Condition Type="OnStart" />
```

### Condition <a href="#condition_on_start_condition" id="condition_on_start_condition"></a>

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wfsys.gitbook.io/workflow-engine-syntax/workflow_engine/scheduler.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
