3

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 から Enter キーを押した直後にエラーが発生し、現在の実装では単に node_load をデバッグしようとしているだけなので、メンテナンス タスクがコメント アウトされています。リストの最初のノードのタイトルを画面にダンプしてから true を返そうとしているだけなので、ループは 1 回だけにする必要があります。

これがこのような問題である理由は、cron を crond から実行できる唯一の方法が drush を使用することであるからです。しかし、drush がこのコマンドを実行できない場合、私は行き詰まっています。

Drush 5 を使用しても問題は解決しません。

4

1 に答える 1

0

PHP フィルター モジュールを有効にしていますか? 誰かがあなたのノードの 1 つに悪いコードを入れたに違いありません。これは、php モジュールを使用してはならない多くの理由の 1 つです。

于 2012-04-22T03:27:50.877 に答える