D8では、hook_cronをプログラミングしました。何度かテストしましたが、監視ログにログが表示されません。
モジュールの名前はnncbtです。コードはnncbt.moduleに配置されます。
何か提案はありますか?
function nncbt_cron() {
$last_run_per_minut = \Drupal::state()->get('nncbt.last_run', 0);
// If 1 minutes passed since last time.
if ((REQUEST_TIME - $last_run_per_minut) > 60) {
\Drupal::logger('nncbt')->info('Runnning Cron every 1 minut log');
// Update last run.
\Drupal::state()->set('nncbt.last_run', REQUEST_TIME);
}
// Run the following every 5 minutes
$last_run_per_5_minuts = \Drupal::state()->get('nncbt.last_run_5_minuts', 0);
// If 5 minutes passed since last time.
if ((REQUEST_TIME - $last_run_per_5_minuts) > 300) {
\Drupal::logger('nncbt')->info("Runnning Cron every 5 minut log");
// Update last run.
\Drupal::state()->set('nncbt.last_run_5_minuts', REQUEST_TIME);
}
}
次に、管理者が定義したように、cronが実行されるたびにエンジンがフックを呼び出します。
つまり、hook_cronは後に実行されますcronの実行が発生します。したがって、cronを1日に1回実行するように設定している場合、hook_cronスクリプトは1日に1回だけ実行されます。そのため、cronを5分以下で実行するように設定する必要があります。
より良い代替手段として、さまざまなcronタスクのさまざまなcron実行時間をスケジュールできるようにする ltimate Cron のようなモジュールを使用することをお勧めします。このように、cronは5分ごとにすべてのタスクを実行するのではなく、特定のタスクのみを実行します。