Posted by redboxhosting on January 15, 2015 at 7:53am
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
管理 » レポート » 最近のログメッセージ
管理 » レポート » 最近のログメッセージ に何かログが表示されていませんか?
また、cronは1以内に完了する処理量でしょうか?
さらっと実装を見た感じだとcronが実行される前にロックを取りに行っているようなので、
1回当たりのcronで1分以上かかるのであれば、ロックが取れずに失敗するはずです。
(この場合はログが出ます)
あとは実際にcron.phpにアクセスしている部分の処理を書いてもらうと何かわかるかもしれません。
早速のご連絡ありがとうございます。 ログは出力されないよう
早速のご連絡ありがとうございます。
ログは出力されないように設定しているため、早速ログが出るようにして様子を見ています。
現在は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
Elysia CronのINSTALL.txtを見た感じだと、
との事なので、 coreに含まれる標準のcron.phpをElysia Cronモジュール内にある
cron.phpで上書きすれば外から叩けるみたいですよ。
blauerbergさん コメントありがとうございます。
blauerbergさん
コメントありがとうございます。
ひとまずCoreのCronをモジュールのCRONで上書きして外部からアクセスしてみたところ無事に更新タイミングが反映されました!
おそらく外部からLinuxのCron等でDrupalのGlobal Cronを1時間以下の値で実行したい場合は、
こちらのモジュールを導入し、モジュールに付属しているCron.phpをCoreのCron.phpに上書きすることが必須な気がしました。