2017-01-12 2 views
1

Итак, у меня есть Cloudflare и Prestashop, чтобы улучшить время загрузки, однако побочный эффект CDN заключается в том, что мои cronjob могут работать только до 90 секунд. Любые дольше, и Cloudflare отправит ошибку 524, и cronjob не будет запущен должным образом.Использование длинных рабочих заданий Cron с Prestashop и Cloudflare CDN

Согласно Cloudflare есть два способа обойти эту проблему. Я могу либо уменьшить размер процесса cronjob, чтобы он входил в 90-секундное окно (это не вариант), либо я могу запускать cronjobs в отдельном субдомене, на который Cloudflare не влияет. Однако проблема с этим параметром заключается в том, что Prestashop имеет что-то встроенное в него, так что независимо от того, какой субдомен вы используете для посещения сайта, он просто перенаправляется в основной домен.

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

+0

можете ли вы опубликовать код файла, который называется cron? –

+0

У меня есть несколько разных. Один, который берет базу данных клиентов и импортирует электронные письма в mailchimp, тот, который обрабатывает электронные письма с оставленными корзинами, и тот, который проверяет ход доставки через DHL и UPS и соответственно обновляет статус заказа в prestashop. – cyanoxide

ответ

0

Итак, через некоторое время мне удалось решить эту проблему. Мне пришлось изменить несколько контроллеров prestashop, чтобы добавить исключение для моего конкретного поддомена. Мне нужно было изменить инструкцию if на строке 370 shop.php (classes/shop/Shop.php), чтобы она выглядела так (убедитесь, что вы обновили «exceptionption.myshop».ком»с субдомена:.

if ((!$id_shop && defined('_PS_ADMIN_DIR_')) || Tools::isPHPCLI() || in_array($http_host, $all_media) || $http_host == 'exemption.myshop.com') { 

Я тогда пришлось модифицировать две функции в frontController.php (классы/контроллеры/frontController.php) Мне нужно добавить следующий фрагмент кода в верхней части обоих sslRedirection и функции canonicalRedirection выше всего остального внутри каждой из функций.

 if (Tools::getHttpHost() == 'exemption.myshop.com'){ 
     return; 
    } 

Затем я удалил class_index.php из папки кэша на главном каталоге и были внесены изменения. Вы можете проверить, чтобы увидеть, если он работает по адресу субдомен, он должен загрузить страницу без изменения URL-адреса.

0

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

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

Второй вопрос заключается в том, что вы должны выполнить cron несколько раз, чтобы убедиться, что процесс завершен полностью. Вы можете сделать расчет, зная, насколько полностью выполняется сценарий для завершения выполнения. Например: 30 минут в периоды 90 секунд, то вы должны выполнить время cron 20 с интервалом в 100 секунд.

Для выполнения cron у вас есть несколько вариантов: - Конфигурация панели администратора хостинга. - Варианты оперативной системы. - Prestashop бесплатный модуль cronjob. - сторонние службы.

Я надеюсь, что это может вам помочь.

Удачи.

+0

Это интересная концепция и что-то, на что я обязательно буду смотреть, но я не уверен, как это сделать. Большинство заданий cron, которые я использую, включаются в различные модули prestashop, поэтому в идеале я бы хотел найти решение, которое не требует от меня модификации модулей, чтобы заставить его работать. – cyanoxide

+0

Здравствуйте. Используйте сторонние службы, рассчитывающие частоту и задержку для каждого cron, который у вас есть. Или просто используйте модуль Prestashop cronjob. Увеличьте время ожидания хостинга, если сможете. Большинство кронов не должно длиться долго. Если вы обнаружите, что конкретно занимает много времени, он должен иметь возможность не начинать звезду с самого начала после перерыва. Если нет, вы должны изменить его. Удачи. – PrestaAlba

0

Перенаправление домена не выполняется в контексте администратора. Каждый контроллер на FrontOffice проверяет текущий URL-адрес и перенаправляет на канонический, если это необходимо (если домен, например, не является стандартным). Но этот механизм не существует на BackOffice.

Тогда, если у вас есть, например, основной домен www.example.com и субдомен cron.example.com, если вы пытаетесь получить доступ к cron.example.com/ вы будете перенаправлены на домен по умолчанию, потому что вы пытаетесь получить доступ к FrontOffice. Но если вы попытаетесь получить доступ к модулю cronjobs в backoffice, он будет работать без перенаправления http://cron.example.com/admin-1f5zef1/index.php?controller=AdminCronJobs&token=7498b7d228cc3e630ee2fe6b34bd1638.

Протестировано и работает на моем сайте.

+0

В этом случае, как я мог бы запускать свои cronjobs через область администратора, поскольку все они имеют ссылки, которые указывают на модули за пределами области администрирования? – cyanoxide

Смежные вопросы