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

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

                     888     8888888 
888 888
888 888
.d88b. .d8888b 888888 888
d8P Y8b 88K 888 888
88888888 "Y8888b. 888 888
Y8b. X88 Y88b. 888
"Y8888 88888P' "Y888 8888888


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