@Evdokim001
Начинающий PHP программист

Почему Cron не влияет на работу сайта?

Добрый день. Понимаю что Cron все же действует на скорость сайта но недавно столкнулся со следующей проблемой. Когда вешаю функцию на хук AJAX, весь сайт начинает глючить но когда использую cron с этой функцией вообще нет ощущения что скрипт работает. Использую встроенный Cron WordPress. Дополнительно также есть вопрос о том, как можно включить свою PHP функцию, чтобы она не влияла на производительность сайта?
Заранее спасибо
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 3
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Ащущэння у одного там в Минске есть.

Твоя функция на кроне отрабатывает в соседнем процессе, просто на компьютере достаточно памяти и процессора, чтобы ты не чувствовал это когда один. А сама функция она не "глючит", она "ждет пока сделается", причем скорее всего ждет ответа от сервера, куда стучиться, большая часть скриптов выполняются очень быстро, разве что ты не вытягиваешь в файл пол-базы. Для таких задач и используют "фоновые".

Собственно так и отправляют рассылки, почты, емейлы и прочее. Делают карту сайта, производят парсинг других сайтов, что там ещё, делают задачи расчитанные на "недели" - это когда человек должен на мобиле через неделю кнопку нажать, а задача все еще открыта и ждет его. Называется "фоновая задача". Просто второй скрипт пхп запускается одновременно с первым.
Ответ написан
@402d
начинал с бейсика на УКНЦ в 1988
fkn.ktu10.com/?q=node/10487
Как проявляется проблема
Проблема касается обычно обслуживания частых или одновременных запросов одного пользователя -- вы запрашивает скрипт, который долго "не отпускает" сессию, и все другие скрипты, запрошенные этим пользователем и тоже работающие с сессией виснут.
Ответ написан
Комментировать
iMedved2009
@iMedved2009
Не люблю людей
1. Хреновый вариант fastcgi_finish_request. Эту функцию можно поставить перед выполнением большой задачи, она ответит вебсерверу - он отдаст данные клиенту, а код продолжит работать, клиент перестанет ждать и пойдет по своим делам. Вариант херовый потому что можно легко получить ситуацию когда все воркеры выполняют тяжелые задачи - а клиенты получают 502.
Ну и работает только в режиме fast_cgi.

2. Менее хреновый вариант. Перенести задачу в отдельны скрипт и отправить его в бэкграунд через exec и nohup.
exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &');
Минус - в том что вы ровно так же можете получить вагон запущенных скриптов и сожрать уже не все воркеры php-fpm а все ресурсы сервера

3. Вариант - очереди. Тут без особых минусов кроме того как я хрен знает можно ли это легко привязать к wordpress
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы