Cronがいつ実行されているか(そして可能であれば、どのタスクが実行されているか)をプログラムで判断する方法はありますか? drupal_cron_run() にバインドされているいくつかのオプションをオンラインで調べましたが、cronを開始することを目的としているため、このメソッドの使用をリッスンする方法の例はありません。
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');
}
確認できる変数は_cron_last
_です。最後に完了したcron実行のタイムスタンプになります。
したがって、variable_get('cron_last')
のようなもの