DrupalのCroni実行タイミングのコントロールについて

Events happening in the community are now at Drupal community events on www.drupal.org.
redboxhosting's picture

DrupalのCroni実行タイミングのコントロールについて、初歩的なことで申し訳ないのですが、
アドバイス頂けると助かります。

1分毎に定期的にCRONを実行したいと考えており、定期的にDrupalのcron.phpにアクセスしているのですが実行されていないようです。

尚管理画面から手動でCronを実行すると実行時間もボタンを押した時間となりCronが利いているようなのですが、URL経由で行った場合のみGlobal Cronが動かない問題に直面しています。

普通のサイトと構成が異なる点は以下の通り、

1:マルチサイトである

以下のようなディレクトリ構成
drupalROOT/sites/domain1.com

2:sites.phpにエイリアスを記載している

sites.phpにて以下のように記載しています。

<?php
$sites['test.domain1.com'] = 'domain1.com';

Cron.phpのアクセスURLは以下の通りです。

http://test.domain1.com/cron.php?cron_key=xxxxxx

マルチサイトの場合Cronを外部から実行することは出来ないのでしょうか。

よろしくお願いします。

Comments

blauerberg's picture

管理 » レポート » 最近のログメッセージ に何かログが表示されていませんか?
また、cronは1以内に完了する処理量でしょうか?

さらっと実装を見た感じだとcronが実行される前にロックを取りに行っているようなので、
1回当たりのcronで1分以上かかるのであれば、ロックが取れずに失敗するはずです。
(この場合はログが出ます)

あとは実際にcron.phpにアクセスしている部分の処理を書いてもらうと何かわかるかもしれません。

redboxhosting's picture

早速のご連絡ありがとうございます。

ログは出力されないように設定しているため、早速ログが出るようにして様子を見ています。
現在は1分毎の処理が終わりきらないことも考慮し5分間隔でブラウザで手動アクセスして確認中です。

また、もう少し正確に申し上げますと特定のルールで作った処理を決まった時間に実行したいが為に、
グローバルCRONを1分間隔で実行しています。

※以下のモジュールをいれて、ルールで利用するCRON以外のJOBは6時間スキップするように設定しています。
Elysia Cron
https://www.drupal.org/project/elysia_cron

ルールモジュール単体で特定のルールだけ外部から実行できれば要件は満たせるのですが、どうも出来ないようなので、代案としてElysia Cronを入れています。

Elysia Cronは個別に管理画面からCRONを実行できるのでこれだ!とおもったのですが外部からルールCRONだけ実行するやり方がわからず、結局グロバルCRONを早期タイミングで回し他のCRONはスキップさせるという事を行っています。。

なにかもっとスマートな方法はありますでしょうか。

よろしくお願いします。

Elysia

blauerberg's picture

Elysia CronのINSTALL.txtを見た感じだと、

While you're editing the system crontab, it's also recommended to replace the
"/cron.php" part with "/sites/modules/elysia_cron/cron.php" (if you have
installed elysia_cron in "sites/modules" directory).
This is an optional step (you can leave "/cron.php" if you want), doing it will
result in a better performance in bigger sites (elysia_cron's cron.php handles
cache in a better way).

との事なので、 coreに含まれる標準のcron.phpをElysia Cronモジュール内にある
cron.phpで上書きすれば外から叩けるみたいですよ。

redboxhosting's picture

blauerbergさん

コメントありがとうございます。
ひとまずCoreのCronをモジュールのCRONで上書きして外部からアクセスしてみたところ無事に更新タイミングが反映されました!

おそらく外部からLinuxのCron等でDrupalのGlobal Cronを1時間以下の値で実行したい場合は、
こちらのモジュールを導入し、モジュールに付属しているCron.phpをCoreのCron.phpに上書きすることが必須な気がしました。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: