有没有人知道Drupal执行它的_cron钩子的顺序是什么?对于我正在开发的某个自定义模块而言,它很重要,似乎无法在Web上找到任何文档。也许我正在寻找错误的东西!
有任何帮助吗? 杰夫
答案 0 :(得分:9)
Drupal根据模块权重按顺序执行所有挂钩。模块权重默认为0,辅助顺序按模块名称按字母顺序排列:
答案 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)
钩子的执行取决于实现它们的模块的权重;权重模块将在最后执行。