Порядок выполнения Drupal hook_cron - PullRequest
5 голосов
/ 14 июня 2010

Кто-нибудь знает от руки, в каком порядке Drupal выполняет свои ловушки _cron?Это важно для определенного пользовательского модуля, который я разрабатываю, и я не могу найти какую-либо документацию по нему в Интернете.Может быть, я ищу не ту вещь!

Любая помощь?Джефф

Ответы [ 4 ]

9 голосов
/ 15 июня 2010

Drupal выполняет все свои хуки в порядке, основанном на весе модуля.Вес модуля по умолчанию равен 0, а вторичный порядок в алфавитном порядке по имени модуля:

http://api.drupal.org/api/function/module_list/6

2 голосов
/ 14 июня 2010

Вы можете проверять и корректировать порядок выполнения cron с помощью модуля Supercron . Еще несколько подробностей об этом модуле (со страницы его проекта):

SuperCron - полная замена встроенной функциональности Cron в Drupal. Позволяет:

  • См. Список всех хуков Cron, найденных в включенных модулях.
  • Измените порядок, в котором называются крючки cron
  • Отключить определенные крючки
  • Запускайте задачи, которые вы выбираете параллельно, так что задачи cron будут выполняться все сразу, а не одна за другой
  • Определение исключений, вызванных отдельными хуками
  • Вызывайте перехватчики индивидуально по запросу (отлично подходит для выявления проблем)
  • Продолжайте выполнять хроны cron, которые следуют за исключением, ограничивая повреждение только одним модулем
  • Измерьте время, необходимое для выполнения хрона cron (мы отображаем время последнего вызова и среднее время)
  • Захватить любой вывод, сгенерированный хуками
  • Изменение поведения Cron, когда сайт загружен (эта дополнительная функция требует включения Throttle)
  • Ограничьте IP-адреса, которые могут быть разрешены для вызова ваших скриптов cron
1 голос
/ 06 апреля 2018

Для Drupal 8 вы должны изменить порядок реализации модулей в hook_module_implements_alter:

function YOUR_MODULE_module_implements_alter(&$implementations, $hook) {

  // Move our hook_cron() implementation to the end of the list.
  if ($hook == 'cron') {
    $group = $implementations['YOUR_MODULE'];
    unset($implementations['YOUR_MODULE']);
    $implementations['YOUR_MODULE'] = $group;
  }
}

Если вы хотите сначала позвонить вашему hook_cron:

function YOUR_MODULE_module_implements_alter(&$implementations, $hook) {

  // Move our hook_cron() implementation to the top of the list.
  if ($hook == 'cron') {
    $group = $implementations['YOUR_MODULE'];
    $implementations = [
      'YOUR_MODULE' => $group,
    ] + $implementations;
  }
}
0 голосов
/ 15 июня 2010

Выполнение крючков определяется весом модуля, который их реализует;модуль взвешивания будет выполнен последним.

...