web-dev-qa-db-ja.com

Drupal 7 cronはcivicrmのスケジュールされたジョブを実行しません

Drupal 7を使用しており、cronジョブを1時間ごとに実行するように設定しています。

ただし、drupal cronを実行すると、CiviCrmスケジュールジョブが実行されません。これらのスケジュールジョブは、[すべてのスケジュールされたジョブを手動で実行する]リンクをクリックしたときにのみ実行されます。

drupal cronジョブがCiviCrmスケジュールジョブを実行するように構成する方法はありますか?

または、追加のモジュールをインストールするか、CiviCrmスケジュールジョブが自動的に実行されるように設定を構成する必要がありますか?

4
vences

サーバーでCiviCRMの個別のcronエントリを構成する必要があります。 CiviCRMの スケジュールされたジョブの管理 は、ここにあるリファレンスドキュメントです。

ベストプラクティスは、CiviCRM cronを個別に実行することです。

  • 多くのCiviCRMタスク(たとえば、大量の電子メールの配信)は、Drupalの一般的なcronスケジュールには適していません。
  • DrupalからCiviCRM cronを実行すると、別のDrupalモジュールのタイムアウトまたはcronの失敗の原因となる問題により、CiviCRMタスクの実行が妨げられる可能性があります。
  • 同様に、CiviCRM cronをDrupal内から実行すると、CiviCRM cronがタイムアウトまたは失敗した場合に、他のDrupal cronタスクが起動するのを防ぐことができます。

DrupalでCiviCRMのcronを実行することは可能ですが(例 CiviCRM Cron または Elysia Cron モジュール))、私はお勧めしませんそのアプローチ。

CiviCRM cronをデバッグする際の確認事項-

  • ウェブサーバーを実行しているのと同じユーザーアカウントからcronを呼び出していますか? CiviCRM cronタスクは、_templates_c/_ディレクトリへの書き込みアクセス権を持っている可能性があり、そこに書き込むことができないユーザーとして呼び出されると失敗する可能性があります。
  • CiviCRMスケジュールタスクページから呼び出されたときにタスクは実行されますか? _civicrm/admin/job?reset=1_にアクセスし、その他>今すぐ実行をクリックします
  • PHPコマンドを実行してCiviCRM cronを実行するコマンドからの出力はありますか?その場合、エラーを示している可能性があります。suを使用して、これを実行するときと同じようにWebサーバーが実行するユーザーアカウントを想定します。

DrupalをCiviCRMで広範囲に使用しているため、ほとんどのサイトのcronを使用して

_drush -u 1 @example.org civicrm-api job.execute auth=0 --out=json
_

ここで、@ example.orgは、問題のサイトに設定されたエイリアスです。

CiviCRM cronを頻繁に呼び出し(サイトの最大待機時間は数分)、待機時間を減らし、キューの増加を回避します。

サイトのcronエントリmightは、次のようになります_/etc/cron.d/civicrm_

_[email protected]
*/7 * * * *    www-data    drush -u 1 @example.org civicrm-api job.execute auth=0 --out=json
_

...しかし、これを環境に合わせて調整する必要があります。特定のタスクを頻繁に呼び出し、他のタスクを週に1回呼び出すこともできます。上記のユーザー、Drushエイリアス、Drushへのパスを確認する必要があります。

また、分析のためにcron出力をsyslogにルーティングしますが、これはこれの範囲外です。 CiviCRM cronは、他のDrushコマンドとは異なり、Drush出力ステータス(drush_log()の_$type_パラメータ)を設定しません。

8
Chris Burgess

サーバーのcronジョブ構成から直接スケジュールされたジョブのCiviCRMのcronを起動することをお勧めします。

手動:

スケジュールされたジョブ :これらのジョブは、Webホスティングサーバーで定期的に実行されるcronによってトリガーされる必要があります。

Wiki:

スケジュールされたジョブの管理 :ただし、ほとんどのサイトでは、サーバーのコマンドラインから必要なジョブを実行するのが最適です。多くの場合、1つ以上の自動的にスケジュールされた「cron」ジョブとして実行します。

ただし、Drupalのcronに結び付けることを目的としたモジュールがあります。 CiviCRM Cron 。私はそれを使用していませんが、特にサーバーレベルでcronを設定できない場合、それはあなたが求めているもののように見えます。

Drupalのcronを使用してCiviCRMのcronを呼び出します。 CiviCRMのcronは、コマンドラインから直接呼び出すことができます(呼び出す必要があります)が、これは、CiviCRMのcronを構成することが不可能または不都合な場合に、CiviCRMのURLで使用されるユーザー、パス、およびサイトキーを定義し、CiviCRMのcronを呼び出す簡単な方法です。

3

Elysia Cron モジュールを試してみてください。

これにより、どのcronジョブをいつ実行するかをより詳細に制御できます。 cronジョブがすべてのジョブを完了する前にタイムアウトになる可能性があります。このモジュールを使用して、Civicrm cronジョブを他のcronジョブとは異なる時間に実行するように構成できます。

1
t14