Создание пользовательского Cron-файла

Иногда возникает необходимость запуска какой-либо операции в Drupal с довольно частой периодичностью, например 1-2 минуты. В таком случае разумным решением будет создание собственного Cron-файла.

Да, в корне Drupal имеется файл cron.php, однако не всегда целесообразно его часто дергать. В стандартной комплектации при запуске крона Drupal очищает таблицы от устаревших записей, обновляет поисковый индекс. Список задач, выполняемых при запуске cron’a, в любом проекте можно расширить через hook_cron().

Однако для задач с высокой периодичностью я предпочитаю все же создавать отдельный Cron-файл. Где создавать файл решать вам, так как есть две концепции:

  • с одной стороны все файлы модуля должны лежать в одной папке sites/modules;
  • с другой стороны, если файл Cron’a лежит в корне, то при переносе сайта вы не забудете настроить его запуск.

Я предпочитаю все же держать Cron-файл в корне проекта, поэтому создаем cron.custom.php и помещаем в него код:

  1. define('DRUPAL_ROOT', getcwd());
  2.  
  3. include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
  4. drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
  5.  
  6. if (!isset($_GET['cron_key']) || variable_get('cron_key', 'drupal') != $_GET['cron_key']) {
  7. watchdog('my_custom_cron', 'Cron could not run because an invalid key was used.', array(), WATCHDOG_NOTICE);
  8. drupal_access_denied();
  9. }
  10. elseif (variable_get('maintenance_mode', 0)) {
  11. watchdog('my_custom_cron', 'Cron could not run because the site is in maintenance mode.', array(), WATCHDOG_NOTICE);
  12. drupal_access_denied();
  13. }
  14. else {
  15. my_custom_cron_run();
  16. }

Да, ничего удивительного нет – код просто скопирован из cron.php. Первые строчки кода – это стандартное подключение любого левого файла к Drupal, путем поднятия ядра. Дальше идет проверка на соответствие Cron Key, который является уникальным для каждого сайта и не позволяет злоумышленникам запускать Cron чаще того, как это задано владельцем сайта. Ну и после всех проверок должна вызываться функция вашего модуля.

Теперь остается настроить программный запуск вашего Cron-файла. Для этого в настройках вашего хостинга поищите раздел "Задачи по расписанию", "Cron Jobs" или что-то в этом духе. В зависимости от хостинга команды запуска могут различаться, однако маски времени запуска везде одинаковые:

  • */2 * * * * - означает запуск каждую вторую минуту;
  • 5 * * * * - означает запуск один раз в час на пятой минуте.

Как правило, у каждого нормального хостера есть инструкция по настройке команды. Если нет, то всегда можно смело написать в техподдержку.

Вот таким образом можно создать собственный Cron, который будет работать независимо от основного.

Комментарии

Аватар пользователя Ch
Ch

Можно добавить в модуль драш команду и прописать ее в крон.

Аватар пользователя angarsky
angarsky
Интересный вариант, не задумывался даже. Спасибо!

Добавить комментарий

     d8888                                     
d8P888
d8P 888
d8P 888 .d8888b .d8888b 88888b.d88b.
d88 888 88K 88K 888 "888 "88b
8888888888 "Y8888b. "Y8888b. 888 888 888
888 X88 X88 888 888 888
888 88888P' 88888P' 888 888 888


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