Создание пользовательского 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                          
d88888
d88P888
888d888 d88P 888 88888b. 888 888 888
888P" d88P 888 888 "88b 888 888 888
888 d88P 888 888 888 888 888 888
888 d8888888888 888 d88P Y88b 888 d88P
888 d88P 888 88888P" "Y8888888P"
888
888
888
Зарегистрируйтесь для добавления материалов без проверки.