Drupal hook_cron执行命令

时间:2010-06-14 19:16:25

标签: drupal cron hook

有没有人知道Drupal执行它的_cron钩子的顺序是什么?对于我正在开发的某个自定义模块而言,它很重要,似乎无法在Web上找到任何文档。也许我正在寻找错误的东西!

有任何帮助吗? 杰夫

4 个答案:

答案 0 :(得分:9)

Drupal根据模块权重按顺序执行所有挂钩。模块权重默认为0,辅助顺序按模块名称按字母顺序排列:

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

答案 1 :(得分:2)

您可以使用Supercron模块检查和调整cron执行订单。有关此模块的更多详细信息(来自其项目页面):

  

SuperCron完全取代了Drupal的内置Cron功能。它允许您:

     
      
  • 查看已启用模块中找到的所有Cron挂钩列表
  •   
  • 更改调用cron挂钩的顺序
  •   
  • 禁用某些挂钩
  •   
  • 并行运行您选择的任务,以便一次执行cron任务而不是一个接一个地执行
  •   
  • 识别个别挂钩引发的例外
  •   
  • 根据需要单独调用挂钩(非常适合发现问题)
  •   
  • 继续执行异常后的cron挂钩,将损坏限制在一个模块
  •   
  • 测量执行cron挂钩所需的时间(我们显示最后的通话时间和平均时间)
  •   
  • 捕获钩子生成的任何输出
  •   
  • 更改网站负载时Cron的行为方式(此可选功能需要启用Throttle)
  •   
  • 限制可能允许调用cron脚本的IP地址
  •   

答案 2 :(得分:1)

对于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;
  }
}

答案 3 :(得分:0)

钩子的执行取决于实现它们的模块的权重;权重模块将在最后执行。