Менеджер задач

16 февраля 2023, 17:01

Менеджер задач Scheduler

Начиная с версии miniShop2 4.1 - компонент поддерживает работу с отложенными задачами, выполняемыми по рассписанию. В качестве зависимости используется дополнительный компонент Scheduler

В качестве примера и готового, встроенного функционала используется отложенная отправка Email клиенту и менеджеру(ам)

Без менеджера задач, в процессе оформления заказа - система отправляет несколько писем-уведомдений сразу же, что тормозит ответ сервера ожидающему Покупателю, для которого оформление заказа все еще идет. Каждое письмо отправляется секунд по 10-15.

Менеджер задач позвляет не отправлять письмо сразу, а лишь поставить задачу об этом, что существенно быстрее. Сама задача будет выполнена позже, фоновым процессом, без участия администратора.

Включение менеджера задач

  • Убедитесь что у вас установлен компонент Scheduler
  • Включите системную настройку ms2_use_scheduler
  • Настроить ваш CRON для ежеминутной проверки новых задач. Подключите на ежеминутное выполнение файл assets/components/scheduler/run.php

Пример записи в вашем crontab * * * * * php ~/www/assets/components/scheduler/run.php

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

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

К сожалению, по умолчанию сервер не умеет запускать задачи чаще чем раз в минуту. Это ограничене на уровне операционной системы. Но есть лайфхак, позволяющий настроить запуск скрипта чаще. Например каждые 10 секунд.

Просто напишите несколько вызовов подряд с задержкой вызова (sleep 10)

* * * * * sleep 00; run-one php ~/www/assets/components/scheduler/run.php
* * * * * sleep 10; run-one php ~/www/assets/components/scheduler/run.php
* * * * * sleep 20; run-one php ~/www/assets/components/scheduler/run.php
* * * * * sleep 30; run-one php ~/www/assets/components/scheduler/run.php
* * * * * sleep 40; run-one php ~/www/assets/components/scheduler/run.php
* * * * * sleep 50; run-one php ~/www/assets/components/scheduler/run.php

Обратите внимание, здесь использовано несколько дополнительных команд.

  • sleep 10 Задержка выполнения на 10 секунд
  • run-one проверка не запущена ли предыдущая задача. Если вызванный ранее процесс выполнения этого файла еще не завершен, то повторно задача не будет выполняться. Таким образом обходим потенциальное дублирование писем

Обратите внимание. run-one это отдельная серверная программа (apt пакет). Она есть не на всех хостингах. Например на modhost.pro ее нет. Если ее не будет - задача вообще не будет запускаться.

Больше информации

Подробнее о компоненте Scheduler читайте в соотвествующем разделе нашей документации