Cron在运行Drush时失败,并调用node_load()

时间:2012-04-04 15:19:14

标签: php drupal drupal-6 drush

我有一个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运行时,Watchdog在cron类型下显示一条新消息,说“Cron run超过了时间限制ans被中止”。奇怪的是,我在从CLI进入输入后几乎立即得到错误,在我当前的实现中,我只是尝试调试node_load,所以我已经将我的维护任务注释掉了。我只是试图将列表中第一个节点的节点标题转储到屏幕然后返回true,所以它应该只循环一次。

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

即使使用Drush 5也无法解决问题。

1 个答案:

答案 0 :(得分:0)

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