Объявление

Хотите приглашение на сайт? Пишите: niikto@samovarchik.info


 

Re: Интерфейс к cron

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

За это отвечает скрипт protected/cron.php.
Т.к. он находится в защищенной директории, то извне доступ к нему закрыт. Но это не мешает работать с ним изнутри сервера.

Для того, чтобы скрипт начал выполнять задания, нужно добавить его в список работ cron'а (crontab). Как именно - зависит от вашего хостинга. Например, из командной строки через ssh, либо через web-интерфейс панели управления.
Задание должно выглядеть примерно так:

*/5 * * * * php -f /path/to/root/protected/cron.php 2>&1 > /dev/null

Тут мы запускаем cron.php на выполнение каждые 5 минут.

Для того, чтобы добавить новые задания на выполнение, нет необходимости модифицировать сам protected/cron.php. Достаточно просто указать их в файле настроек protected/config/cron.php.

Что для этого нужно:

  • Создаем новый класс для вашего задания, наследуем его от класса PeComponent, сохраняем в директории protected/. (Либо, если вы уже добавляли свой класс с заданиями, можете воспользоваться им и добавить ему новый метод)

  • Пишете метод класса, который будет выполнять нужную работу.
    Методу не должно передаваться каких-либо переменных, и он не должен ничего возвращать вызывающему коду.
    Если периодичность выполнения работы не совпадает с периодичностью запуска cron.php, добавьте соответствующую проверку. Например, можно хранить дату и время предыдущего запуска в файле в директории cache/ или в базе данных, и сравнивать с ней.

  • Добавьте правила инициализации объекта вашего класса в protected/config/cron.php, как это описано в этой статье

  • Там же в protected/config/cron.php добавьте в массив Jobs строку вида:

    'jobName' => array('component' => 'objectName', 'method' => 'methodName'),

    (С запятой в конце строки)
    Здесь нужно заменить jobName на название, которое вы присвоите своему заданию, objectName - на название, которое вы назначили инициализированному объекту вашего класса на предыдущем шаге, methodName - на название метода, который должен выполняться.

Все, после сохранения protected/config/cron.php уже при следующем запуске будет выполнена новая задача.

P.S. Про отладку.
Если при работе вашего кода будет вызвано исключение, то сообщение об ошибке и трассировку (debug trace) можно посмотреть в логе в cache/cron_error.log.
Если при работе кода произошла фатальная ошибка, то искать сообщение нужно в логах сервера, и тут все зависит от настроек вашего хостинга (хотя я надеюсь, что на хостинг вы будете выкладывать уже отлаженный код).

 

Дизайн сайта отсутствует
оформление: Группа «САМОВАРчик»

[ Сгенерировано за 0.016 сек, 8 запросов выполнено - Использовано памяти: 1.87 MiB (Пик: 1.93 MiB) ]