web-dev-qa-db-ja.com

プログラムでcronが実行されているかどうかを判別する方法

Cronがいつ実行されているか(そして可能であれば、どのタスクが実行されているか)をプログラムで判断する方法はありますか? drupal_cron_run() にバインドされているいくつかのオプションをオンラインで調べましたが、cronを開始することを目的としているため、このメソッドの使用をリッスンする方法の例はありません。

3
Cameron Kilgore

Drupal 7:

現在のページリクエストがcronのリクエストであるかどうかを判断するには:つまり、「私のコードはcron中に呼び出されていますか?」

Cron.phpからcronを実行している場合は、おそらくこれで十分です。

return strpos($_SERVER['REQUEST_URI'], 'cron.php') !== 0;

Cronを特定するためのより信頼できる方法は、イントロスペクション(debug_backtrace()など)を使用することですが、これにより、オーバーヘッドが大幅に増加します。

すべてのcronリクエストがまだ実行されているかどうかを判断するには、すべてのDrupalスレッドおよびページロード:つまり、「 cronを実行しているプロセスはありますか?」.

Drupalは、cronの実行中にcron_semaphoreという変数をプログラムで設定します。この変数は、cronが完了すると削除されます。この変数の存在を確認して、cronが現在アクティブかどうかを判断できます。

if (variable_get('cron_semaphore', FALSE)) {
  // cron is running
}

drupal_cron_run() のドキュメントでcron_semaphoreの具体的な使用法を確認できます。

「実行中のタスク」はhook_cronの実装であり、次を使用して見つけることができます。

foreach (module_implements('cron') as $module) {
  $function = $module . '_cron';

  drupal_set_message($function . '() is being ran');
}
8
Yuriy Babenko

確認できる変数は_cron_last_です。最後に完了したcron実行のタイムスタンプになります。

したがって、variable_get('cron_last')のようなもの

1
Josh Koenig