Cron. Общее

Что такое Cron.

В Панеле Управления вашим сайтом, есть возможность настроить автоматический запуск php-программы в определенное время:

Если настроить Crontab на запуск программы admin/cron.php, которая является составной частью плагина, то она сможет, в определенное время скачивать прайс лист по ссылке или через FTP и обрабатывать его с помощью заданной формы поставщика.

Таким образом, можно обеспечить обновление цен и остатков товаров в автоматическом режиме, без участия человека. Достаточно в настройках прописать путь на сервере к файлу: ваш_сайт.com/admin/cron.php и периодичность старта Crontab:

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

Рекомендуется настроить старт каждую минуту или каждые 5 мин. круглосуточно (чем чаще, тем лучше).

Задание Crontab на сервере представляет собой "будильник", который периодически запускает программу плагина cron.php. На этом, функции Crontab заканчиваются, дальше работает программа cron.php.

Программа cron.php может отказаться стартовать, если:

  • не наступило время, установленное в настройках какой-либо формы поставщика
  • форма поставщика занята обработкой прайс листа,

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

Внимание1.

Если Crontab настроен стартовать каждые 5 минут, то в случае тайм-аута будет 5-ти минутная пауза. Т.е. если при обработке большого прайс листа было 10 тайм-аутов, то 50 минут будет потеряно.

Внимание2.

Программа cron.php может быть запущена вручную (используется для отладки) из адресной строка браузера:

Поэтому рекомендуется переименовать файл cron.php каким-либо (только вам известным) именем, чтобы стороннее лицо не смогло его запустить.

Например:  cron121212.php

Итого. Алгоритм работы:

  • Crontab запускает программу admin/cron.php
  • Программа cron.php проверяет, какая форма поставщика должна быть запущена в данное время
  • Скачивает прайс лист и, если прайс лист успешно скачался, последовательно выполняет задания, прописанные в форме поставщика во вкладке "Cron".

Cron. Алгоритм и правила

Пакеты заданий.

Для каждой формы поставщика может быть задан пакет заданий, состоящий из 3-х предварительных и 6-ти финальных. Предварительные задания выполняются перед обработкой прайс листа, а финальные - после.

Предварительные и Финальные задания - это функции из вкладки "Инструменты".

Каждый пакет заданий настраивается во вкладке "Cron" в форме поставщика и, таким образом, является жестко привязанным к прайс листу.

Для каждого прайс листа - свой пакет заданий:

Алгоритм работы.

Как известно, любой прайс лист может быть обработан своей формой поставщика по нажатию кнопки "Старт из admin/uploads":


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

Предварительно, прайс лист закачивается на сайт с помощью FTP, в папку admin/uploads и переименовывается в 14.xml , 14.xls или 14.xlsx, или 14.csv в зависимости от формата файла, где 14 - номер формы поставщика.

Упрощенно говоря, Cron загружает прайс лист по ссылке в папку admin/uploads, переименовывает его и нажимает эту кнопку вместо вас в заданное время.

Управлять работой Cron можно на странице списка форм поставщиков, включая и выключая пакеты:

Число в скобках (0) означает приоритет выполнения пакета.

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

Правила работы.

  • Cron выполняет все пакеты, которые включены, в соответствии с приоритетом и заданным временем выполнения.
  • Никакой пакет не может начать выполняться, пока не закончит работу предыдущий, поэтому время старта пакетов задается не с точностью до минуты, а с точностью до 1 часа.
  • Скачанный прайс лист автоматически удаляется перед повторным скачиванием (обновляется).
  • Ни одно предварительное или финальное задание не будет выполнено, если скачивание прайс листа закончилось неудачей.
  • Подробный отчет о работе Cron можно посмотреть на сайте, в папке admin/uploads

Основные настройки Cron и общие результаты его работы выводятся на странице списка форм поставщиков:

  1. Дата и время окончания обработка прайс листа (4-е задание пакета).
  2. Количество строк в файлах report / errors (см. Отчет).
  3. Номер часа, номер недели, номер месяца старта пакета (допускается перечисление через запятые).

Cron. Отчет о работе

В результате работы cron.php, в папке admin/uploads на сервере создается отчет - файл log_cron.tmp

Файл открывается "Блокнотом" или "NotePad"-ом и содержит записи о времени выполнения каждого задания, каждого пакета. Например:

здесь можно видеть результаты работы пакета заданий для формы поставщика "Колеса10"

  1. В 23:04 закончилось первое задание. Это инструмент №166 - "Быстрое обнуление остатков товаров"
  2. В 23:05 закончилась обработка прайс листа формой №5 - "Колеса10".
  3. В 23:08 закончилось выполнение инструмента №101 - "Добавить к ценам товаров маржу"
  4. В 23:09 закончилось выполнение инструмента №16 - "Удалить дубли фото в товарах"

Номера инструментов можно увидеть используя средство браузера "Исследовать элемент":


В папке log находятся подробные отчеты об обработке прайс листа, файлы report и errors, отмеченные номером формы поставщика, к которому они относятся:

в данном случае форма поставщика "Колеса10" имеет номер 5


Cron. Настройка заданий

Пакет заданий для формы поставщика устанавливается во вкладке "Cron":

Предварительные задания.

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

 Не требуется обязательно использовать все 3 задания, их можно не использовать вообще. 

Обычно, в предварительном задании включают инструмент: "Быстрое обнуление остатков товаров" или "Установить остаток товара на складе, как в Поле1":

В соответствии с такими настройками, в период с 3:00 до 3:59 часов ночи, всем товарам поставщика №1 "Ukrainian Catholic University" (см. предыдущий рисунок) будет обнулен остаток.

Основное задание.

В поле "Уведомление о выполнении" можно прописать ваш e-mail, чтобы плагин знал, куда присылать свои прикольные сообщения об итогах работы Cron-а:

Обработка прайс листа формой поставщика настраивается в задании №4 "Основное задание":

достаточно прописать ссылку на прайс лист и его формат.

Ссылка может содержать динамическую дату.

Например, поставщик предлагает такую ссылку на прайс лист:

https://www.teride.com/price/price_b1_27-10-2021.xml

в которой дата каждый день меняется.

В таких случаях, следует заменить дату в ссылке на текст [date]:

https://www.teride.com/price/price_b1_[date].xml

снять комментарий в файле admin/cron.php в этом месте:

и поправить формат даты в строке:

$dd = date('Y-m-d', $mk);

например в данном случае:

$dd = date('d-m-Y', $mk);

FTP.

Для доступа к прайс листу через FTP необходимо прописать также и его имя, поскольку в папке может быть несколько прайс листов, предназначенных для других магазинов или для других целей:

Если скачивать прайс лист не нужно, т.к. он уже находится в папке admin/uploads (был скачан ранее другим плагином), то достаточно прописать его имя и не указывать источник:

Ни одно Предварительное и Финальное задание не будет выполнено, если скачивание прайс листа закончится неудачей. Т.е. прайс лист отсутствует в папке admin/uploads (см. правила).

Однако бывает необходимость выполнить только Предварительные и/или Финальные задания без обработки прайс листа. В таких случаях, следует пропустить настройку Основного задания:

Финальные задания.

Имеется возможность выполнить 6 финальных заданий после обработки прайс листа. Вот, несколько полезных примеров:

1. После обработки прайс листа, среди товаров данного поставщика могут оказаться товары, которые не обновились по причине их отсутствия в прайс листе. Чтобы эти товары не фигурировали в магазине, как "Есть в наличии", следует обнулить их остатки:

  • в Поле1 установлен период 2 часа на тот случай, если прайс лист будет обрабатываться дольше одного часа
  • кнопка - в положении "Только этот поставщик", для того, чтобы плагин не обнулил товар других поставщиков.

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

  • будут отключены товары, остатки которых равны 0 или 1
  • касается только товаров данного поставщика "Только этот поставщик".

3. Остаток товара можно указывать более гибко:

  • к названиям товаров, остатки которых равны: 1, 2, 3 или 4 добавится текст (заканчивается)
  • касается всех товаров в магазине, какому бы поставщику они ни принадлежали.

4. Если вы являетесь поставщиком и раздаете прайс листы клиентским магазинам, то эта пара заданий даст возможность автоматизировать процесс:

  • сначала делается экспорт товаров в файл admin/uploads/ex.xml с вашей наценкой 0.3% к ценам
  • полученный прайс лист, под именем products.xml, копируется в папку FOLDER, которая находится в корне сайта
  • скидку можно установить с помощью отрицательного процента наценки, например:  -0.3


Cron. Время

Crontab в Панеле Управления должен быть настроен на работу, с максимальной частотой, которая разрешена на вашем хосте. В идеале, он должен каждую минуту пытаться запустить программу admin/cron.php, входящую в состав плагина.

Программа admin/cron.php может отказать Crontab-у, и не запуститься, если:

  • программа уже работает
  • среди всех пакетов заданий крон, нет ни одного, который должен быть запущен в данный час - время старта пакета не наступило.

Время старта пакета.

Настраивается в каждой форме поставщика индивидуально, во вкладке "Cron":

(пробелы не допускаются, символ * означает "каждый").

Пояснения к рисунку:

  • старт пакета в любую минуту часа: с 5:00 до 5:59
  • старт пакета в любую минуту часа: с 13:00 до 13:59
  • старт пакета в любую минуту часа: с 19:00 до 19:59
  • только в понедельник(1), среду(3) и пятницу(5)
  • каждую неделю месяца.

Такие настройки предписывают пакету стартовать первый раз в понедельник, в 5:00, если предыдущий пакет закончил свою работу. Иначе, он может стартовать позже, в любую минуту от 5:00 до 5:59.

Время крона на сервере может не совпасть с временем вашего часового пояса, и может не совпасть с временем сервера:

Поэтому число в поле "GMT:" подбирается эмпирически.

Период.

Время старта пакета может быть обозначено символом * . Это означает, что пакет должен стартовать сразу после окончания работы предыдущего пакета. Таким образом, можно запустить работу всех пакетов по кругу, в порядке приоритета.

Но для того, чтобы все время не выполнялся только пакет с приоритетом 1 нужно установить период, в течение которого ни один пакет не сможет выполниться повторно.

По-умолчанию, в программе cron.php установлен период 240 минут, это значит, что каждый пакет сможет выполниться повторно не ранее, чем через 4 часа.

Т.е. мы взяли на себя смелость предположить, что все ваши задания успеют выполниться за 4 часа. Если мы ошиблись, поправьте нас в файле admin/cron.php в этом месте:

Величина периода не должна быть меньше суммарного времени работы всех пакетов.

Внимание.

Например, если период установлен на 4 часа, то такая настройка времени не имеет смысла:

т.к. если пакет стартует в 2 часа ночи, то следующий его старт возможен не ранее 6 часов утра.

P.S.

Часто при отладке используется запуск крона из строки браузера:  site.com/admin/cron.php

Если вы не хотите ждать 4 часа, чтобы запустить пакет повторно, временно, установите период 1 минута.

Cron. Кнопки

Управление пакетами.

Управлять работой пакетов Cron можно с помощью трех кнопок, находящихся над списком форм поставщиков:

  1. Прерывает последовательность выполнения пакетов, заставляя их выполняться с начала. Период начинает отсчитываться с нуля.
  2. Продолжает выполнения пакетов, с места остановки.
  3. Остановка выполнения пакетов. Используется в случаях, когда нужно срочно выполнить какой-либо Инструмент или обработать внеплановый прайс лист. Состояние пакетов запоминается, чтобы после нажатия кнопки "Cron Продолжить" процесс продолжился с того же места, где был остановлен.

Если после нажатия кнопки "Cron Пауза", она засветилась красным цветом, значит команда не была выполнена и ее нужно повторить через время, когда закончится работающее задание крона или наступит тайм-аут.

Срочный старт пакета.

Запустить один конкретный пакет можно нажатием кнопки "Cron Start" в форме поставщика:

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

Внимание.

При нажатии кнопки "Cron Start" отключаются все пакеты, кроме текущего. Потом, их придется включить вручную.

usergio Copyright © 2023