Модуль [AVP] Фоновые задачи


#1

На стадии окончательной отладки находится модуль, через который можно создавать фоновые (запускаемые по расписанию) задачи.

image

image

Во всех моих модулях присутствует такой чекбокс. Если по каким-то причинам надо удалить модуль и затем снова поставить - все Ваши данные останутся, до тех пор, пока Вы не удалите модуль с этим отмеченным чекбоксом.
Единственное что придется снова ввести - это настройки модуля, но над этим я тоже сейчас работаю.

Вам надо добавить лишь одно задание в cron. Добавляйте задание от пользователя, под которым работает веб-сервер. Выполнение: * * * * * - для запуска каждую минуту.

/usr/bin/php /srv/hitdekor/htdocs/www/index.php --dispatch=avp_background_tasks.cronjob --switch_company_id=1 --access_key=ваш_ключ

Менеджер задач
Вержнее меню:
Журнал - Переход к журналу выполненных задач
Корзина - Удаление всех задач
Плюс - Создание новой задачи
Действия над задачей:
Корзина - Удалить задачу
Редактирование - Переход к редактированию задачи
Ручной запуск - Ручной запуск запланированной задачи. При этом создается копия задачи (с припиской в названии “ручной запуск”), для копии задачи ставится настройка: “однократный запуск”.
Журнал - Перейти к просмотру журнала выполнения конкретной задачи

Последняя колонка Статус - дает возможность включить или выключить задачу. В процессе выполнения задачи у нее может появиться статус Неподтвержденный. Задача с этим статусом находятся в процессе выполнения (также в списке задач подсвечены розовым цветом, как и отчет в журнале, до момента, когда задание будет завершено). Также, если задача поставлена как выполнение функции - при наличии ощибки - может отвалиться на этой ошибке и не быть завершенной. В этом случае у задачи также останется статус Неподтвержденный. Если вы уверены, что это не ошибка - то можете изменить статус задачи на Вкл - и тогда она снова встанет в очередь. Если она снова выпадет со статусом Неподтвержденный - все же правильней будет попытаться найти ошибку в вызываемой функции. В этом случае придется заглянуть в лог-файл веб-сервера. Задачи, запускаемые двумя другими способами, всегда выполняются успешно, так как запускаются параллельным процессом, считывая их вывод и записывая в лог.

В списке задачи отсортированы по времени исполнения. За один проход запускается одна задача. Допустим, если получилось так, что на 14:00 запланировано несколько задач, первая будет выполнена в 14:00, вторая - 14:01, третья - 14:02 итд, при этом интервал будет отсчитываться не от фактического времени запуска задачи, а именно от запланированного.

Задачи также отсортированы по статусу. Выключенные задачи расположены внизу списка на сером фоне.

Создание/редактирование задачи

(пункт Среда выполнения - пока не рабочий. На данный момент думаю, как обезопасить пользователя от случайного необдуманного действия)

Форма добавления задачи крайне проста.

Шаг 1: Заполните название задания - короткая фраза, по которой станет понятно, что она делает.

Шаг 2: Опишите процесс выполнения задания более подробно - при их большом количестве через некоторое время это поможет Вам вспомнить, зачем эта задача была нужна.

Шаг 3: Выберите из списка установленных модулей, к какому модулю относится задача. Это даст еще одну возможность идентифицировать принадлежность задачи, а также просмотривать в журнале отчеты, относящиеся к определенному модулю, отдельным списком.

Шаг 4: Выберите тип выполнения. Этот тип также отображается на списке задач и в журнале. F - выполняется как внутренняя функция cs-cart или любая функция PHP. Для этого в поле Задание вводим функцию, а в поле аргументы - аргументы функции, если они нужны, по одному на каждой строке. Пока только значения, в дальнейшем можно будет передавать переменные и массивы. P - задание для исполнения php из командной строки. Обратите внимание - в настройках модуля надо указать правильный путь. Здесь параметры не применяются. L - применяется для скачивания файлов. Обратите внимание, что в настройках модуля указывается папка в которую будут складываться скачанные файлы. первой строкой в аргументах должно идти имя файла, под которым скачанный файл будет сохранен. Полезно например, если надо постоянно забирать с одного адреса прайс поставщика.

image

Журнал.

Если выбрать какую-либо задачу (задачи) - меню по шестеренке можно вывести журнол только для этих задач, или только для всех задач, которые относятся к модулю выбранной задачи.
После того, как будут показаны записи журнала, относящиеся к одной задаче - в меню появится пункт Удалить выбранное, что позволит быстро почистить журнал, не очищая его весь.

Если задание имело какой-то вывод (в консоль, или функция возвращала значение) - показывается ссылка Ответ обработки

А если задание завершилось с ошибкой - будет показан код ошибки и вывод задания в консоль, где эта ошибка часто более подробно описана.

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

Примеры созданных заданий:

Вопросы и предложения - пишите в личку