Как работать с работой cron в zendframework 2?

У меня две функции в zend framework 2, которые приносят мне детали квартир с другого сайта и сохраняют их в моей базе данных. (НО ОНИ ТОЛЬКО ТОЛЬКО КОГДА Я РАБОТАЮ С ФУНКЦИЯМИ).

например, имя контроллера – «FetchFromSourceController», а функции – «index» и «ical». это имена, которые я использовал.

Но мое требование состоит в том, что эти две функции должны запускаться автоматически один за другим, когда начинается день, с промежутком в 10 минут. т.е. действие индекса должно запускаться в 12:00, а действие ical должно выполняться ежедневно в 12:10.

Я слышал, что для этой цели я мог бы использовать «cron job», но раньше этого не использовал. Скажите, пожалуйста, где написать код задания cron в ZF2 для запуска этих функций в эти конкретные моменты.

или, по крайней мере, дать мне несколько уроков для использования задания cron в zendframework2. Я искал его, но не нашел. Заранее спасибо.

ZF2 не имеет службы «cron job» для автоматического запуска скриптов в определенное время.

Задача Cron – это задача, выполняемая в определенное время и обычно настраиваемая на уровне операционной системы. В unix это выполняется через crontab, в окнах вы можете использовать планировщик задач. В ZF2 нет ничего, что запустит ваши скрипты ровно в 12:00 и 12:10.

Вариант № 1: задание Cron через панель администратора

Для большинства хостинговых сред вы можете настроить «задание cron» через панель администратора хостинга веб-сайта (например, Plesk или cPanel). Там вы сможете запланировать задание, указав время и команду для запуска. Когда вы создаете задание cron таким образом, имейте в виду, что вы будете вводить команду для запуска через командную строку. Обычно это напрямую вызывает php для выполнения определенного скрипта, но вы также можете использовать wget для извлечения любого URL из Интернета. Если вы вызываете php напрямую, вам нужно настроить консольный маршрут в соответствии с ответом Zdenek.

/usr/bin/php /path/to/zf2/public/index.php myIndexConsoleRoute 

или

 wget http://yoursite.com/fetch-from-source/index 

Вариант №2: настройка Crontab через командную строку

Кроме того, если у вас есть доступ к командной строке на ваш сервер и правильные разрешения пользователя, вы можете настроить crontab через командную строку на ответ Zdenek. Здесь также есть соответствующая информация. Обычно это предпочтительный метод, но, на мой взгляд, он немного более сложный и может быть проблемой для настройки и отладки, особенно если вы не знакомы с Unix.

Вариант № 3: Служба задания Cron. Если вы ищете более простое решение, вы можете рассмотреть одну из услуг cron, которая будет загружать определенный URL в данный момент времени.

Например, я использовал эту услугу в прошлом: https://www.setcronjob.com

После того, как вы создадите свою учетную запись, вы просто вводите URL-адрес и выбираете время, в которое вы хотите называть URL-адрес. Вы можете легко выполнить свои требования, чтобы вызвать indexAction в 12:00 и icalAction в 12:10, настроив два задания, один для запуска в 12:00, а другой – в 12:10. SetCronjob имеет бесплатный план, который может соответствовать вашим потребностям, но имейте в виду, что они требуют, чтобы вы вводили капчу каждые 30 дней, чтобы продлить свою бесплатную учетную запись (это нормально, но через некоторое время становится раздражающим).

URL-адрес против командной строки

С помощью «wget» в Варианте №1 и Службы Cron в Варианте № 3 вам необходимо сделать ваши indexAction и icalAction доступными через http. Это может быть важным соображением. Даже если вы добавите какую-то проверку (проверив код, отправляемый по строке запроса или сообщению), все же возможно, что любой пользователь Интернета может инициировать эти функции, если они знают правильный «секретный» URL. Наличие ваших физических и индексных методов, доступных через HTTP, имеет дополнительное преимущество, заключающееся в том, что вы можете легко их вызвать, если вы хотите вручную запустить эти сценарии для принудительного обновления.

С помощью подхода CLI, упомянутого Zdenek, вы создаете консольный маршрут в ZF2 и единственный способ запуска этого маршрута через командную строку. Это обычно предпочтительнее, потому что ваш индексный и ical-метод не будут отображаться в http, но это не всегда вариант в зависимости от вашей настройки хостинга, и это может быть не очень важно в зависимости от того, что эти функции выполняют с вашими данными и общедоступным сайтом ,

С Zf2 вы можете получить доступ к действиям Controller из командной строки через CLI, он работает очень хорошо. Все, что вам нужно сделать, это добавить маршрутизацию в module.config.php

 return array( ...... 'console' => array( 'router' => array( 'routes' => array( 'synch' => array( 'options' => array( 'route' => 'synch (sites|items):task', 'defaults' => array( 'controller' => 'Application\Controller\Scheduled', 'action' => 'synch' ) ) ), ), 

Как вы можете видеть, это вызов Application \ Controller \ Scheduled controller, synch action, там

 public function synchAction() { $task = $this->params('task'); try{ switch($task){ case 'sites': ....... break; case 'items': ....... break; } 

Затем вы можете создать простой сценарий оболочки zf2.sh

 php /var/www/vhosts/mysite/httpdocs/public/index.php $1 $2 

и добавить кронтаб

 0 6 * * * /home/admin/scripts/zf2.sh synch sites 

или просто запустить из командной строки

 ./zf2.sh synch items 

Это зависит от вашего сервера и его системы cron. Например, на Debian / Ubuntu очень просто http://www.pantz.org/software/cron/croninfo.html

Вы можете использовать этот полезный модуль для создания cron: https://github.com/heartsentwined/zf2-cron