Задать вопрос
@ex3xeng

Как лучше организовать планировщик задач?

Как лучше организовать планировщик задач на сайте?
Хотелось бы альтернативы, минуя крон.

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

Пока вижу только 1 минус это тот человек на котором сработает планировка заданий, для него сайт может вообще не открыться. Есть ли ещё минусы? И как себя проявит данный механизм при посещении от 5т пользователей, какие идеи?
  • Вопрос задан
  • 479 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
allard
@allard
Серийный программист
Я бы посоветовал крон использовать, либо другой планировщик задач.

Что касается вашей идеи, то зачем пытаться выполнить ваши задачи при формировании страницы для пользователя... Просто отдаете страницу пользователю, а потом через js ajax`ом вызываетет свой скрипт с задачами, а в ajax пропишите timeout: 1, т.е. ждать ответа от сервера 1 мс, что бы скрипт не ждал выполнения задач а просто завершился. На jquery посмотрите api.jquery.com/jquery.ajax

Еще главное, если у вас используются сессии на сайте, в файле с скриптом для задач отключите сессии, иначе у вас заблокируется все взаимодействие с пользователем до конца выполнения всех операций скриптом в фоне...
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
для него сайт может вообще не открыться
Можно запускать ваши задачи в отдельном процессе.

А чем вам крон не угодил?
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Такой способ, который вы описали, используется часто. Но он убог и производители CMS, которые так делают, настоятельно рекомендуют использовать системный крон.

В битриксе это называется "крон на хитах", например.
Ответ написан
zoonman
@zoonman
⋆⋆⋆⋆⋆
То, что вы собираетесь делать, плохо. Чревато гонкой условий, когда 2 процесса будут пытаться сгенерировать один файл, отвалами сайта по таймауту для пользователей и прочими неприятными вещами ввиде зависающих апачей и т.п.
Правильная организация задач по расписанию подразумевает независимое от пользователя и асинхронное неблокирующее выполнение.
Правильный подход - использование планировщика задач (в вашем случае cron) и системы очередей, выполняющей задачи (например на основе gearman).
Подход с очередями задач позволяет упростить процесс генерации файлов, изолировать его от остальной части сайта. Например, когда нужно сгенерировать прайс, а потом разослать его 10к клиентов.

В вашем случае cron со специально написанной под него задачей наиболее простое и эффективное решение.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы