web-dev-qa-db-ja.com

毎分および5分ごとにcronジョブを実装する方法は?

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);

    }

}
1
Justme

hook_cron()

次に、管理者が定義したように、cronが実行されるたびにエンジンがフックを呼び出します

つまり、hook_cronは後に実行されますcronの実行が発生します。したがって、cronを1日に1回実行するように設定している場合、hook_cronスクリプトは1日に1回だけ実行されます。そのため、cronを5分以下で実行するように設定する必要があります。

より良い代替手段として、さまざまなcronタスクのさまざまなcron実行時間をスケジュールできるようにする ltimate Cron のようなモジュールを使用することをお勧めします。このように、cronは5分ごとにすべてのタスクを実行するのではなく、特定のタスクのみを実行します。

5
No Sssweat