web-dev-qa-db-ja.com

cronジョブでバッチAPIを実行する方法

私はDrupal 8およびバッチAPIに取り組んでいます。importingmatchを呼び出すバッチAPIを作成しました。これは1時間ごとに自動的にインポートされるはずです。

私の解決策は、ブラウザなしで機能させるためにDrushを使用することですが、バッチIDを取得する方法がわかりません。

以下は、Batch APIに関する私のコードです。

// Set up the Batch API
    $batch = array(
        'operations' => $operations,
        'finished' => 'importingmatch_finishedBatch',
        'title' => t('Import match'),
        'init_message' => t('Starting import match.....'),
        'progress_message' => t('Completed @current step of @total.'),
        'error_message' => t('Import match deletion has encountered an error.'),
    );

    batch_set($batch);

現在、自分のPCからアクセスすれば、このバッチは完全に実行されています。 URL:www.mysite.com/importing_matchサーバーCentosからDrushを使用して動作させる方法がわかりません。実行するにはバッチIDが必要です:Drush batch-process

更新:-Command for Drushに興味を持って、モジュールからカスタムコマンドを作成しました。ここからフォロー: https://www.chapterthree.com/blog/how-to-create-custom-drush-commands 。しかし、それはまだ機能していません、それは示しています:

The drush command '<name>' could not be found.

Localhostからsettings.phpから127.0.0.1に変更しましたが、役に立ちません。何か案が?

4
JohnTang

Cron APIを使用する代わりに、独自のカスタムDrushコマンドを提供し、そこにバッチAPIを実装できます。次に、サーバーのcrontabを使用してこのDrushコマンドを実行します。

次に、バッチを実装するサンプルコマンドを示します。内部module_name.drush.inc put:

function module_name_drush_command() {
  $items = array();
  $items['migrate-batch-list'] = array(
    'description' => 'Migrate import match',
    'examples' => array(
      'drush migrate-batch-list' => 'Migrate import match',
    ),
  );
return $items;
}

function drush_module_name_migrate_batch_list() {
  drush_print('Migrate import match list.');

  $operations = array(...something here you want.);
  $batch = array(
    'operations' => $operations,
    'finished' => 'importingmatch_finishedBatch',
    'title' => t('Import match'),
    'init_message' => t('Starting import match.....'),
    'progress_message' => t('Completed @current step of @total.'),
    'error_message' => t('Import match deletion has encountered an error.'),
  );

  // Initialize the batch.
  batch_set($batch);

  // Start the batch process.
  drush_backend_batch_process();
}

:これはターミナルからdrush migrate-batch-listとして実行できます

9
Ashish Deynap

あなたはしません。バッチAPIは、ユーザーインタラクションを使用して実行時間の長い処理を実行します。

Cronの場合、キューAPIを使用するか、hook_cron()実装でN秒/時間処理するだけです。どちらの場合も、最終的に完了するまでcronが繰り返し呼び出します。

できるだけ速く処理したい場合は、cronで実行されない別のキュー処理を使用するか、cronとは別に実行するカスタムスクリプト/ drushコマンドを作成して、他のcronジョブをブロックしないようにします。

8
Berdir