# Планировщик задач

**Планировщик задач** — это сервис, который позволяет периодически запускать сценарии по указанному правилу. Примеры правил: «по пятницам в 18:00», «в конце каждого месяца», «в будни в 18:00», «каждый час в течении дня».

## Принцип работы

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4bCPMc7N2DAHF78R3%2F%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B%20%C2%AB%D0%9F%D0%BB%D0%B0%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%C2%BB%20%D0%B2%20Bpium%20-%20For%20Save%20\(5\).jpg?alt=media\&token=13ee80ee-2548-4ba3-b22c-a3b92c74b529)

Сервис отправки web-запросов каждые 5 минут отправляет web-запрос в Планировщик задач. Планировщик задач, анализируя Правила запуска сценариев, запускает Пользовательские сценария, которые соответствуют правилу в данный момент времени.

## Реализация

### Каталог для хранения правил запуска

Создайте каталог «Планировщик задач». При создании каталога нужно добавить и настроить следующие поля.

{% hint style="warning" %}
**Важно:** Добавлять статусы в полях нужно строго в вышеописанном порядке, не нарушая последовательность их API ID.
{% endhint %}

* **Статус** (статус).\
  \&#xNAN;*Варианты:* Включено, Выключено.\
  \&#xNAN;*Настройки:* Ставим галочку напротив «По умолчанию: первый элемент».
* **Название** (текст).
* **Описание** (многострочный текст).
* **Месяцы** (статус).\
  \&#xNAN;*Варианты:* январь, февраль, март, апрель, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь, ежемесячно.\
  \&#xNAN;*Важно:* Добавлять статусы нужно в вышеописанном порядке. После сохранения Каталога можно перенести статус «ежемесячно» в начало, чтобы он был выбран по умолчанию. Не делайте этого до сохранения каталога, иначе собьете последовательность API ID.\
  \&#xNAN;*Настройки:* Ставим галочки напротив «Мультивыбор» и «По умолчанию: первый элемент».
* **Дни** (статус).\
  \&#xNAN;*Варианты:* 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, последний день месяца, ежедневно.\
  \&#xNAN;*Важно:* Добавлять статусы нужно в вышеописанном порядке. После сохранения Каталога можно перенести статус «ежедневно» в начало, чтобы он был выбран по умолчанию. Не делайте этого до сохранения каталога, иначе собьете последовательность API ID.\
  \&#xNAN;*Настройки:* Ставим галочки напротив «Мультивыбор» и «По умолчанию: первый элемент».
* **Дни недели** (статус).\
  \&#xNAN;*Варианты:* ПН, ВТ, СР, ЧТ, ПТ, СБ, ВС, ежедневно.\
  \&#xNAN;*Важно:* Добавлять статусы нужно в вышеописанном порядке. После сохранения Каталога можно перенести статус «ежедневно» в начало, чтобы он был выбран по умолчанию. Не делайте этого до сохранения каталога, иначе собьете последовательность API ID.\
  \&#xNAN;*Настройки:* Ставим галочки напротив «Мультивыбор» и «По умолчанию: первый элемент».
* **Часы** (статус).\
  \&#xNAN;*Варианты:* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ежечасно.\
  \&#xNAN;*Важно:* Добавлять статусы нужно в вышеописанном порядке. После сохранения Каталога можно перенести статус «ежечасно» в начало, чтобы он был выбран по умолчанию. Не делайте этого до сохранения каталога, иначе собьете последовательность API ID.\
  \&#xNAN;*Настройки:* Ставим галочки напротив «Мультивыбор» и «По умолчанию: первый элемент».
* **Минуты** (статус).\
  \&#xNAN;*Варианты:* 00, 05, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, каждые 5 минут.\
  \&#xNAN;*Важно:* Добавлять статусы нужно в вышеописанном порядке. После сохранения Каталога можно перенести статус «каждые 5 минут» в начало, чтобы он был выбран по умолчанию. Не делайте этого до сохранения каталога, иначе собьете последовательность API ID.\
  \&#xNAN;*Настройки:* Ставим галочки напротив «Мультивыбор» и «По умолчанию: первый элемент».
* **Выполнить** (связанный каталог).\
  \&#xNAN;*Настройки:* В пункте «Каталог/вид» указываем каталог «Сценария» и ставим галочку в пункте «Мультивыбор».

Пример того, как будет выглядеть карточка каталога «Планировщик задач»:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4fZdKri1yGuNqST_8%2F%D0%90%D0%BD%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F%202020-12-15%20180411.png?alt=media\&token=d97573a2-f304-4ef4-bbee-a6374d192cfd)

### Внешний запрос для запуска сценария

Перейдите в каталог «Внешние запросы» (по умолчанию он находится в отделе «Управление») и создайте новую запись, указав в ней следующие данные:

* **Название:** укажите название внешнего запроса, например: Обработка каталога «Планировщик задач».
* **URL-идентификатор:** укажите уникальный PATH для формирования URL, на который будут отправляться web-запросы, например: cron. Правило, по которому можно определить сформированный url, описано в комментарии <img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4kbJcGuuViNuVNFl0%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202021-01-15%20141553.png?alt=media&#x26;token=9c4d7c7e-2853-4830-bdc4-fad8b5bc4154" alt="" data-size="line"> к полю.

Пример заполненных данных карточки каталога «Внешние запросы»:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4kiXMHlUdhgriUGCd%2F%D0%90%D0%BD%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F%202020-12-15%20184053.png?alt=media\&token=ce3e637a-296a-41d8-a3e4-2acad5a80e76)

### Сценарий обработки запланированных задач

#### Создание записи сценария

Перейдите в каталог «Сценарии» (по умолчанию он находится в отделе «Управление») и создайте новую запись, указав в ней следующие данные:

* Название: укажите название сценария, например: Обработчик каталога «Планировщик задач».
* Сценарий: скачайте [файл](https://drive.google.com/file/d/1YxFwgWj4cj8wLR1_Rl6e4KBv8trRoBW7/view?usp=sharing) сценария и загрузите его в поле.

Пример заполненных данных карточки каталога «Сценарии»:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4lCNKa7eFnu0_7Bm0%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202020-12-21%20130034.png?alt=media\&token=f70ba5be-2657-4391-a38e-0fc9f86420e9)

#### Настройка файла сценария

Откройте файл сценария в поле «Сценарий» и отредактируйте следующие компоненты, согласно комментариям внутри них:

* Компонент: **«utcOffset & scriprtFieldId»**.
  * Укажите часовой пояс - сотрите комментарий и вместо него укажите по какому часовому поясу будут запускаться запланированные задачи. Например: 3 или -5.
  * Укажите ID поля «Выполнить» - сотрите комментарий и вместо него укажите API ID поля «Выполнить» из каталога «Планировщик задач», который был создан в пункте 3.1.
* Компонент: **«Поиск записей, которые подходят по фильтрам»**.
  * Укажите ID поля «Статус» - сотрите комментарий и вместо него укажите API ID поля «Статус» из каталога «Планировщик задач», который был создан в пункте 3.1.
  * Укажите ID поля «Месяцы» - сотрите комментарий и вместо него укажите API ID поля «Месяцы» из каталога «Планировщик задач», который был создан в пункте 3.1.
  * Укажите ID поля «Дни» - сотрите комментарий и вместо него укажите API ID поля «Дни» из каталога «Планировщик задач», который был создан в пункте 3.1.
  * Укажите ID поля «Дни недели» - сотрите комментарий и вместо него укажите API ID поля «Дни недели» из каталога «Планировщик задач», который был создан в пункте 3.1.
  * Укажите ID поля «Часы» - сотрите комментарий и вместо него укажите API ID поля «Часы» из каталога «Планировщик задач», который был создан в пункте 3.1.
  * Укажите ID поля «Минуты» - сотрите комментарий и вместо него укажите API ID поля «Минуты» из каталога «Планировщик задач», который был создан в пункте 3.1.

Компоненты сценария, в которые нужно внести изменения:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4lhiQ4GHuyp94AXJ9%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202020-12-23%20112407.png?alt=media\&token=990741c9-a972-4d56-9466-aed49b310f27)

####

#### Прикрепление записи сценария к внешнему запросу

Перейдите в каталог «Внешние запрос», откройте запись, которая была создана в пункте 3.2 и в поле «Выполнить» укажите сценарий, который был создан в пункте 3.3.1.

Пример заполненных данных карточки каталога «Сценарии»:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4lvPml8OTECB8TRHD%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202020-12-21%20135517.png?alt=media\&token=f8be6af9-c03f-438b-bc2b-2c7f02964c4a)

###

### Сервис периодической отправки web-запросов

#### Выбор сервиса

Сервис отправки web-запросов должен уметь отправлять GET запросы на определенный URL не реже, чем каждые 5 минут. Мы советуем использовать сервис «CronJob».

#### Настройка сервиса

Перейдите по ссылке на сервис [CronJob](https://cron-job.org/en/) и зарегистрируйте аккаунт. После регистрации аккаунта, перейдите во вкладку «Cronjobs» и нажмите кнопку «Create cronjob».

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4mGGwME9aOA2B5mXv%2Fscreenshot-cron-job.org-2020.12.21-15_16_07%20\(1\).png?alt=media\&token=6cc06235-b81a-46d5-9c7f-d8467e1e0083)

Настройте и создайте «Задачу» (cronjob). Заполните следующие поля:

* **Title:** укажите название на ваше усмотрение, например: Запуск планировщика задач каждые 5 минут.
* **Address:** укажите URL на который будут отправляться GET запросы, пример: https\://\[Ваш домен]/api/webrequest/\[URL-идентификатор].
  * **Ваш домен:** это URL по которому вы переходите в систему БИПИУМ. Например: somedomen.bpium.ru.
  * **URL-идентификатор:** данные из поля «URL-идентификатор» записи внешнего запроса, которая была создана в пункте 3.1.
* **Schedule:** выберите первый вариант и в количестве минут укажите «5».

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4mLzrSJB473VaS8In%2Fscreenshot-cron-job.org-2020.12.21-15_22_13.png?alt=media\&token=59a711db-a19c-49f2-b90c-6763ab222c94)

###

### Правила запуска сценариев

#### Настройка правил

Правилами запуска сценариев являются записи в каталоге «Планировщик задач». Чтобы создать новое правило, нужно создать новую запись в этом каталоге и указать следующие данные:

* **Статус:** определяет включено или выключено правило.
* **Название:** указываем название на ваше усмотрение.
* **Описание:** здесь можно описать назначение используемого правила.
* **Месяцы:** в каких месяцах правило будет действовать. Чтобы правило действовало в течении всех месяцев укажите «ежемесячно».
* **Дни:** в какие числа месяца (не важно какой именно месяц) правило будет действовать. При выборе значений, нужно учитывать, что значения: «29», «30», «31» есть не во всех месяцах, поэтому лучше использовать значение «последний день месяца». Чтобы правило действовало в течении всех чисел месяца укажите «ежедневно».
* **Дни недели:** в какие дни недели правило будет действовать. Чтобы правило действовало в течении всех дней недели укажите «ежедневно».
* **Часы:** в какие часы дня правило будет действовать. Чтобы правило действовало в течении всех дней недели укажите «ежечасно».
* **Минуты:** в какие минуты часа правило будет действовать. Чтобы правило действовало в течении всех дней недели укажите «каждые 5 минут».

При создании правил нужно учитывать, что выбранные значения в полях: **Месяцы, Дни, Дни недели, Часы, Минуты** применяются по логическому выражению «И». А в рамках одного поля применение идет по логическому выражению «ИЛИ».

Пример противоречия. В поле **Дни** указано (только) значение «17», а в поле **Дни недели** указано (только) значение «СР». Обработка правил запустилась 17.12.2020 в 13:00. В этом случае правило не сработает, так как 17 число не СР (среда).

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4nVmC79zObFFOWk_x%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202020-12-23%20133249.png?alt=media\&token=8d6ee756-3563-442b-9f01-6868500f8a17)

####

#### Примеры правил

**Пример 1.** Правило запуска сценариев по пятницам в 18:00. В соответствующих полях нужно указать следующие данные:

* Месяцы - ежемесячно
* Дни - ежедневно
* Дни недели - ПТ
* Часы - 18
* Минуты - 00

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4sC1wdljNmoixxAf5%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202021-01-15%20144901.png?alt=media\&token=911d7d3a-bd58-40ec-a8f0-d5f2f7af2245)

**Пример 2.** Правило запуска сценариев в конце каждого месяца. В соответствующих полях нужно указать следующие данные:

* Месяцы - ежемесячно
* Дни - последний день месяца
* Дни недели - ежедневно (указываем чтобы правило не противоречило предыдущему, описано в пункте 3.5.1)
* Часы - 18 (чтобы в течении последнего дня месяца сценарий не запускался каждые 5 минут, нужно указать определенное время)
* Минуты - 00 (чтобы в течении последнего дня месяца сценарий не запускался каждые 5 минут, нужно указать определенное время)

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4sKNnC0L7qzNuPRlA%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202021-01-15%20144942.png?alt=media\&token=a6b34e28-f4f7-4a9d-85da-d1fdf4e23f1d)

**Пример 3.** Правило запуска сценариев в будни в 18:00. В соответствующих полях нужно указать следующие данные:

* Месяцы - ежемесячно
* Дни - ежедневно
* Дни недели - ПН, ВТ, СР, ЧТ, ПТ
* Часы - 18
* Минуты - 00

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4sZhOV2GZTYO5ue4n%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202021-01-15%20145038.png?alt=media\&token=0d986ecc-1c59-4e36-bfee-2189c5155602)

**Пример 4.** Правило запуска сценариев каждый час в течении дня. В соответствующих полях нужно указать следующие данные:

* Месяцы - ежемесячно
* Дни - ежедневно
* Дни недели - ежедневно
* Часы - 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20
* Минуты - 00

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR50edh9Tb3RclmD6Nb%2F-MR51APm1z3St4u45qHi%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202021-01-15%20153238.png?alt=media\&token=f1667974-dfe0-47fe-8ac4-bd39a4c30da5)

## Тестирование

Откройте каталог «Планировщик задач» и создайте новое правило, указав следующие данные в полях:

* **Статус:** Включено.
* **Название:** Тестирование.
* **Месяцы:** ежемесячно.
* **Дни:** ежедневно.
* **Дни недели:** ежедневно.
* **Часы:** ежечасно.
* **Минуты:** 00, 15, 30, 45.
* **Выполнить:** создайте тестовый сценарий компонентами которого являются «Начало процесса» и «Конец процесс» и укажите его в данному поле. Пример сценария:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4rFODeu4JBL_Ky0Jj%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202021-01-15%20144500.png?alt=media\&token=49bf8751-691d-49c3-89ec-a553739a90d2)

Пример заполненных данных карточки каталога «Планировщик задач»:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4rTSEpnUPAM29sxQB%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202021-01-15%20144559.png?alt=media\&token=095338fe-4422-478f-a4e3-aee550078553)

По данному правилу указанный сценарий будет запускаться каждые 15 минут.

После создания правила, перейдите в каталог «Процессы», отфильтруйте все записи по сценарию, который указан в ранее созданном правиле, и проверьте запускается ли он каждые 15 минут. Пример того, что «Планировщик задач» настроен правильно:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-MR4Mw4TiXhN4bC-THe_%2F-MR4rqof4l0UZMWpFch5%2Fscreenshot-dvor.bpium.ru-2021.01.15-14_47_17.png?alt=media\&token=f7ec1078-fc78-4579-b4d0-681e039e7808)
