web-dev-qa-db-ja.com

Drupal 7のcronジョブ

PHPファイルがあり、一定の間隔でいくつかのタスクを実行します。

PHPファイルをカスタムモジュールフォルダ内に配置しましたが、Drupal drupal_set_message()のような関数は= PHPファイル。

Drupal関数をこの内部に含める方法PHPファイル?このphpファイルをcronジョブとして実行するように設定するにはどうすればよいですか?

4
ayush

モジュールに hook_cron() を実装し、そこでこれらのタスクを実行する必要があります。

次に、drupalは、デフォルトのcron処理中にこれらのタスクを自動的に実行します。

例としてdrupal_set_message()を使用した可能性がありますが、これらのメッセージを読み取るユーザーがいないため、hook_cron()実装でその関数を使用しても意味がないことに注意してください。別の方法として、メッセージを watchdog() で記録できます。

12
Berdir

Berdirによって報告されたものは正しいです。 cronタスクを正しく設定している場合、hook_cron()の実装はCronジョブの間に呼び出されます。つまり、次のいずれかのコマンドを実行するcronジョブを追加する必要があります。

_/usr/bin/lynx -source http://example.com/cron.php > /dev/null 2>&1
_
_curl --silent --compressed http://example.com/cron.php
_

私が覚えている限り、Drupal管理ページで報告されるcronキーも使用する必要があります。

何らかの理由で(そうする理由はないと思います)、PHPスクリプトを実行するだけで、Drupal cronタスク、つまり、実際に2つのcronジョブを設定し、1つはすでにDrupal cronタスクを実行している場合、PHP cronタスクを実行しようとしているファイル:

_define('DRUPAL_ROOT', 'Set here the directory where Drupal is installed');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
_

そうすることで、PHPファイルは bootstrap.inc で利用可能なすべての関数にアクセスできます。別のDrupalファイルをインクルードする場合は、そのファイルをrequire_once()でインクルードする必要があります。Drupalモジュールから使用できる関数が必要な場合は、 drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL)行の後にrequire_once()を追加します。
モジュールの関数が必要な場合は、hook_cron()を実装し、PHPファイルを実行する必要があります。

Berdirによって報告されたように、a Drupal cronタスクはdrupal_set_message()を呼び出さないでください。cronタスクが実行されると、これらのメッセージは表示されません。エラーメッセージを報告する必要がある場合管理者ユーザーが見ることができる場合、コードは watchdog() を呼び出す必要があります。これにはDrupalを完全にブートストラップする必要があります。関数はbootstrap.incで定義されています。

3
kiamlaluno