【问题标题】:Cron fails when running through Drush, and calling node_load()通过 Drush 运行并调用 node_load() 时 Cron 失败
【发布时间】:2012-04-18 08:08:52
【问题描述】:

我有一个 Drupal 6 站点,并且我有一个自定义模块,它在运行 cron 时在某些节点上执行一些维护操作。

我的代码很简单:

function mymodule_cron() {
  // get all the nodes that need maintenance
  $result = db_query("SELECT * FROM {mymodule_nodes}");

  while ($row = db_fetch_object($result)) {
    // load the node
    $node = node_load($row->nid); // Causes Drush Error

    // Perform Maintenance Tasks
  }
}

问题是,当我使用 drush core-cron 运行 cron 时,它失败并显示: “由于不可恢复的错误,drush 命令异常终止”

使用一些基本的调试技巧,我将问题追溯到 node_load 调用。以这种方式在cron中调用node_load会导致drush core-cron失败吗?

-sh-4.1$ drush status
 Drupal version         :  6.17
 Database               :  Connected
 Drupal bootstrap       :  Successful
 Drush version          :  4.5
 Drush configuration    :
 Drush alias files      :
-sh-4.1$ php -v
PHP 5.3.6 (cli) (built: Mar 17 2011 20:56:13)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
-sh-4.1$ httpd -v
Server version: Apache/2.2.17 (Unix)
Server built:   Oct 27 2010 10:04:21

从 Web 界面运行 Cron 作业可以正常工作而不会出错。问题似乎与 drush 相关。

我检查了看门狗,每当我尝试从 drush 运行它时,看门狗都会在 cron 类型下显示一条新消息,说“Cron 运行超出了时间限制,并且已中止”。奇怪的是,我在从 CLI 中输入后几乎立即收到错误,在我当前的实现中,我只是试图调试 node_load,所以我已经将我的维护任务注释掉了。我只是想将列表中第一个的节点标题转储到屏幕上,然后返回 true,所以它应该只循环一次。

之所以会出现这样的问题,是因为我们能够让 cron 从 crond 运行的唯一方法是使用 drush。但是如果drush不能执行这个命令,那我就陷入了僵局。

即使使用 Drush 5 也不能解决问题。

【问题讨论】:

  • drush -v core-cron 是否为您提供更多可能有用的信息?
  • nmc,感谢您的建议。 drush -v core-cron 只是告诉我“WD cron:Cron 运行超过了时间限制并被中止。[警告]”
  • $row->nid 是否为空?见drupal.org/node/123269#comment-629789
  • 好问题,我只是在 node_load 调用周围包裹了一个 if (!is_null($row->nid)) {} ,但它仍然失败。
  • 运行 drush --debug core-cron 并查看时间。您不应尝试处理 所有 节点。这可能会达到 [Drupal 中 cron 运行的固定时间限制 (api.drupal.org/api/drupal/includes!common.inc/function/…)。最好像 node_update_index() 那样做——每次 cron 运行时处理少量节点。

标签: php drupal drupal-6 drush


【解决方案1】:

您是否启用了 PHP 过滤器模块?我敢打赌有人在你的一个节点中放了一些错误的代码。这是永远不应该使用 php 模块的众多原因之一......

【讨论】:

  • matt2000,我查过了,不是。不过,感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2017-03-26
  • 1970-01-01
  • 2021-11-24
  • 2010-11-03
  • 2015-04-02
相关资源
最近更新 更多