Создание пользовательского 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
Интересный вариант, не задумывался даже. Спасибо!

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

 888b     d888                           d8b 
8888b d8888 Y8P
88888b.d88888
888Y88888P888 888 888 888 .d88b. 888
888 Y888P 888 888 888 888 d8P Y8b 888
888 Y8P 888 888 888 888 88888888 888
888 " 888 Y88b 888 d88P Y8b. 888
888 888 "Y8888888P" "Y8888 888


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