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

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

           8888888                     
888
888
888 888 888 888 888 .d88b.
`Y8bd8P' 888 `Y8bd8P' d88P"88b
X88K 888 X88K 888 888
.d8""8b. 888 .d8""8b. Y88b 888
888 888 8888888 888 888 "Y88888
888
Y8b d88P
"Y88P"
Зарегистрируйтесь для добавления материалов без проверки.