PHP скрипт работает из командной строки, а не из cron - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть скрипт CakePHP, который, я надеюсь, должен быть запущен заданием cron. Он работает нормально из командной строки, но, похоже, не из cron. Линия cron выглядит примерно так:

*/2 * * * * cd /path/to/app;../cake/console/cake do_update

Сам сценарий - и это тот бит, который, я думаю, может быть слишком дурацким, в смысле отбрасывания cron - проходит по подмножеству таблицы Realtors в базе данных, используя системное время, чтобы решить, какие -записать срез базы данных для обновления:

$realtors = $this->Realtor->find('all',array(
'conditions'=>array('Realtor.zone_id'=>1),
'order'=>array('Realtor.num DESC'),
'limit'=>50,
'offset'=>date("i")*25
));

Так что мой вопрос (ы) - есть ли что-то, что я здесь делаю, что, очевидно, бросило бы работу cron за цикл? И, возможно, что еще более важно, является ли мой метод разделения базы данных на управляемые куски в течение часа сумасшедшим? (Я в значительной степени новичок в программировании, поэтому я пробую много вещей, не зная, хорошая ли это практика или нет.) Может кто-нибудь предложить лучший способ циклически просматривать и обновлять большое количество записей в базе данных через cron, что не позволяет отдельным запросам быть слишком большими для обработки системой?

РЕДАКТИРОВАТЬ: он не только всегда работает из командной строки, он также работает при запуске сценария cron на другом сервере. Я полагаю, что на конкретном сервере что-то напутано, поэтому кажется сомнительным, что есть решение, связанное с кодом! Я просто приму ответ из полезной информации о cron'е ниже ...

Ответы [ 4 ]

0 голосов
/ 25 ноября 2010

Попробуйте следовать инструкции, она отлично работает для меня:
http://book.cakephp.org/view/1110/Running-Shells-as-cronjobs

0 голосов
/ 25 ноября 2010

Я бы попытался поместить "cd /path/to/app;../cake/console/cake do_update" в скрипт bash и вместо этого запустить скрипт в cron. Но я не уверен, поможет ли это.

0 голосов
/ 25 ноября 2010

Как правило, вы хотите поместить все свои командные строки в файл оболочки

/ путь / к / торт / консоль / cron.sh

#!/bin/sh
cd /path/to/app
php ../cake/console/cake do_update
*/2 * * * * sh /path/to/cake/cron.sh

Обычно меня не волнует, где на самом деле запускается приложение (если я не использую файлы), и просто делаю

*/1 * * * * php /my/path/my_php.php
0 голосов
/ 25 ноября 2010

Я не очень знаком с cron, но я не думал, что вы могли бы запустить две команды вместе, как это.

Вы можете попробовать:

*/2 * * * * cd /path/to/app && ../cake/console/cake do_update

Это приведет к тому, что две команды будут выполняться вместе (поскольку каждая команда возвращает число, указывающее на успех или неудачу, а в случае неудачи - код ошибки)

Я предполагаю, что ваш PHP-файл также содержит необходимый #! строка в начале, указывающая на интерпретатор PHP, и что права доступа к файлам позволяют выполнять из командной строки? (то есть вы можете буквально выполнить это утверждение выше, и оно работает)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...