2010-11-22 2 views
0

У меня есть веб-приложение, написанное на PHP (Zend Framework), и я хотел бы выполнять (несколько) скриптов каждый раз в то время. Например один раз в день. Я знаю, что это можно сделать с помощью crontab и cronjobs, но не у всех хостинг-провайдеров есть такие возможности. Поэтому я ищу решение без использования Cronjob.Запланированные задачи (cronjob-aternative) с картой Zend?

Как вы это решаете? Каковы возможности?

+0

Было бы интересно посмотреть, есть ли альтернатива, но, насколько мне известно, нет. – 2010-11-22 17:34:36

+0

Zend Server (коммерческое издание) имеет очередь заданий, которая может выполнять повторяющиеся задачи. – Gordon 2010-11-23 08:16:09

ответ

4

Работы Cron действительно предлагают только несколько основных преимуществ: планирование, выполнение и ведение журнала. Это все вещи, которые довольно легко повторить в приложении PHP ...

Шаг первый: Создание таблицы задач

Вы должны были бы хранить:

  1. Частота исполнение
  2. Что для выполнения (включая файл, обратный вызов, Eval-код и т.д.)
  3. Вычислить дату следующего запуска
  4. магазин предыдущего запуска d Атес

Шаг второй: Исполнение

У вас есть несколько вариантов, как на самом деле вызвать задачи:

  1. Позвоните в PHP-порожденных пустой GIF изображения на каждой странице прогона, который запускает код cron.
  2. Вызов скрипт AJAX, который запускает код CRON
  3. Называйте это нормально внутри приложения (может замедлить выполнение)

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

Шаг третий: Вход

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

...

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

4

Вы можете использовать услугу, как это:

CronLess

Настройте ваш сценарий, чтобы быть доступным снаружи, и пусть этот способ обслуживания вызовов, URL-адрес. Для обеспечения безопасности вы могли бы защитить скрипт каким-то токеном.

+0

Мы хотели бы иметь его в самом приложении, поэтому, если служба остановится, наши приложения все равно будут использоваться. Спасибо за предложение, хотя :-) – koko 2010-11-22 19:17:54

0

Я сделал что-то подобное @Adrian Schneider.Если вы хотите добавить больше согласованности в свое приложение, вы можете добавить интерфейс Cronable, который заставляет классы, которые его реализуют, добавить функцию cron(), которая будет обрабатывать внутреннюю логику cron, которая иногда отличается. Все это может быть обернуто и вызывается аналогичным образом с помощью cron-оболочки, которая будет единственным скриптом, называемым cron в системе, который будет решать, какие текущие задания PHP cron будут выполняться. В моем ответе вы можете получить более подробную информацию от here.

1

Проверьте эти ссылки. В настоящее время я использую модифицированный бутстрап (основанный на этих статьях) на нескольких проектах ZF, и так легко запустить приложение из командной строки.

http://blog.astrumfutura.com/2009/09/the-mysteries-of-asynchronous-processing-with-php-part-1-asynchronous-benefits-task-identification-and-implementation-methods/

http://blog.astrumfutura.com/2009/09/the-mysteries-of-asynchronous-processing-with-php-part-2-making-zend-framework-applications-cli-accessible/

http://blog.astrumfutura.com/2009/10/the-mysteries-of-asynchronous-processing-with-php-part-3-implementation-with-spawned-child-processes-using-simple-scripts-or-zend-framework/

0

Я согласен с ответом Арне однако, если вы уже используете Zend Framework, вы должны реализовать свое решение, используя встроенный в Zend_Queue, которая на самом деле сделано для этого. Чтобы узнать, как реализовать это, приведена ссылка на другой вопрос, который описывает, как настроить вашу инфраструктуру. Infrastructure for Running your Zend Queue Receiver

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