私は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に変更しましたが、役に立ちません。何か案が?
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
として実行できます
あなたはしません。バッチAPIは、ユーザーインタラクションを使用して実行時間の長い処理を実行します。
Cronの場合、キューAPIを使用するか、hook_cron()実装でN秒/時間処理するだけです。どちらの場合も、最終的に完了するまでcronが繰り返し呼び出します。
できるだけ速く処理したい場合は、cronで実行されない別のキュー処理を使用するか、cronとは別に実行するカスタムスクリプト/ drushコマンドを作成して、他のcronジョブをブロックしないようにします。