меня есть агенты, которые запускают экспорт на торговые площадки. Условно-есть модуль, у которого есть 5 профилей, каждый из которых запускается через определенный интервал.
На серваке работает крон, работает раз в минуту.
Обращается к файлу cron_events.php, внутри которого-
CAgent::CheckAgents();
CEvent::CheckEvents();
ВНАЧАЛЕ файла я ставлю лог-типо старт , в конце файла-Стоп.
В файле модуля, который делает выгрузку-я поставил лог по шагам-на каждый шаг выгрузки-у меня идет логгирование.
И в чем прикол-в теории как должно быть-в логе должен идти
START
--STEP_EXPORT профиля, или нескольких профилей ( если одновременно отрабатывают)
STOP
НО-в логах я иногда ловлю START 2 раза подряд, потом идет STOP, и после стопа-идет лог шага выгрузки, и после него-снова STOP.
Как будто бы у меня отработал крон, пошло обращение к файлу, но в моменте проверки и исполнения агентов-он не успевает это сделать за минуту, и только через пару минут-он 'развисает', и выполняется.
Проблема в том-что выгрузка пошаговая, и периодически-у меня некоторые шаги повторяются по 2 раза, и в файлах выгрузки идут дубли
Самое простое - сделать периодичность агента раз в 5 минут, а не раз в минуту) Посложнее - сделать какой-то флаг, запущен ли агент и проверять его на старте. Если запущен, выходить из метода, если нет - продолжать. Если выгрузка пакетная, то скрипт где-то сохраняет инфу, сколько он выгрузил и сколько осталось, так ведь? Можно посмотреть, как это работает и как раз использовать для проверки, что выгрузка ещё не завершена.
в том то и дело, что это вроде как все реализовано. У нас висит агент check, у которого период-это период в профиле выгрузки. Как только время наступает-он запускает exec, в который передает id профиля и id шага, и шаг выполняется-а внутри шага идет генерация и запись в файл, после шага-если шаг НЕ последний-то ретёрнится снова агент exec, в котором тот же id профиля и шаг+1
крон раз в минуту выполняется, не сам агент. Т.е в теории-да, возможна ситуация.-когда шаг выгрузки может длиться 5 минут, и эти 5 минут-крон будет обращаться к файлу с check агентами, ииии... а что тогда? У него же флаг выполнения стоит в этот момент ( у агента )-он просто пропускается, пока не закончится
Я бы сделал отдельный файл который запускал по крону потому что выгрузка на площадки в некоторых случаях может длится до часа, агенты могут отваливаться или что может работать нестабильно.
вероятно, если не разберусь в причине-так и сделаю, поставлю хотя бы раз в 10 минут-чтоб наверняка
Зачем так часто грузить информацию на площадки?
вы меня не так поняли-именно крон запускается раз в минуту, все агенты переведены на крон. Сам агент выгрузки на площадки-раз в 8 часов должен запускаться
Время запуска стандартного файла крона не нужно увеличивать. Я написал про отдельный файл.
я понял, в стандартном-убрать проверку и выполнение агентов мого модуля, сделать отдельный файл крона-где будут выполняться только они, и на него-уже раз в 10 минут поставить
Обсуждают сегодня