Как запускать задачи в cron

DVelum 0.9.3 и выше.

Фоновые задачи запускаются консольной командой:

cd /path/to/project/ && php ./console.php  /[controller]/[action]/[time_limit]/[thread] (папка на уровень выше www).

[controller] - код контроллера, описывается в интерфейсе управления модулями публичной части, в нашем случае "сonsole"

Если вы используете роутинг по умолчанию "module", не забудьте создать страницу с кодом "console"  и подключить к ней контроллер.

[Frontend_Console_Controller] (контроллер подготовлен заранее, может запускаться только из консольного режима, авторизуется под учетной записью определенного в файле конфигурации пользователя);

[action] - имя действия, например для public function dosmthAction это "dosmth";

[time_limit] - лимит по времени исполнения, большая часть действий Frontend_Console_Controller блокирует запуск одновременной обработки при помощи механизма файловых блокировок;

[thread] - номер потока (если необходим параллельный запуск процесса).

Список и настройки фоновых задач находятся в файле www/system/config/cronjob.php, где секция cron_config (общие дефолтные настройки и настройки механизма блокировок).

В большинстве случаев используется адаптер фоновой задачи "adapter", который занимается непосредственно выполнением задачи (указывается в настройках конкретной задачи). Так же указывается user_id, от имени которого идет выполнение.

Для разных типов задач в системе предусмотрены два различных механизма.

Адаптер cronjob может быть унаследован от одного из двух классов Cronjob_Abstract и Task_Cronjob_Abstract.

Оба типа адаптеров используют файловые блокировки для предотвращения одновременного запуска задания.

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

В некоторых случаях этот функционал может быть излишним. В этом случае стоит использовать Cronjob_Abstract.

Необходимо помнить, что Task_Cronjob_Abstract работает с таблицами Memory (это необходимо учитывать при настройке mysql). Если вы используете фоновые задачи, советуем включить в планировщик задачу по очистке памяти (clearmemory).