Drupal でサイトを運営する上で、いくつかの機能には定期的な cron.php の実行が必要となるものがあります。 例えば、検索用の索引付けやログの定期削除、コンテンツの更新を他サイトに知らせるための ping 送信、あるいはアグリゲータなどです。
cron.php の実行のためには、Drupal をインストールしたディレクトリにある cron.php にアクセスすればよく、一般に、Unix 系サーバであれば crontab(以下、単に cron) を、MS-Windows 系サーバであれば定期的にコマンドを実行する同種のアプリケーションを使用し、wget や lynx などのユーザが対話しなくとも使用できるツールを定期的に起動し、cron.php にアクセスさせます。
ところがこれらは、無料あるいは廉価なホスティングサービス(レンタルサーバ)では、利用できないことが少なくありません。
このような場合、
- 定期的にブラウザから手動でアクセスする
- アプリケーションなどを使用して、自身の PC から定期的にアクセスする
- poormanscron のようなモジュールを使用し、ユーザのサイトへのアクセスを利用する
など、いくつかの方法がありますが、どれも短所が多く、cron の代用としてはスマートではありません。
そこで、寝ている間でも定期的に cron.php を実行してくれ、かつ、無料で利用できる、cron の代用となる方法をご紹介します。
WEB 型 RSS リーダによる cron の代用
昨今、ブログのブームと相まって、WEB 上で多くのサイトの RSS を読むことのできる、WEB 型 RSS リーダのサービスを行うサイトが増えてきました。 これは、ユーザが登録した特定のサイトの RSS を定期的に取得し、それをユーザが WEB 上で閲覧できるというサービスです。
ここまで読んで、飲み込みの早い方なら「ああ、なるほど」と思ったことでしょう。 そう、このサービスは『定期的に特定のアドレスにアクセス』してくれるのです。
つまり、これを利用して定期的に cron.php にアクセスしてもらえば、cron を利用した場合と同等の効果が得られることになります。
ですが、少しだけ待ってください。 単純に cron.php にアクセスするだけでは空白のページが返るだけで、提供されているサービス本来の目的とは異なり、明らかにサービスの乱用となってしまいます。
そのため、この方法を利用する場合は、必ず RSS フィードを返し、サービス本来の目的に沿うようにする必要があります。
以下に、「はてな」を利用した具体的な方法を示しますので、それを参考にして、きちんと RSS フィードの取得をするようにしてください。
1) Drupal をインストールしたディレクトリにある cron.php をエディタで開き、最終行に以下の1行を追加します。
// Clean up
variable_set('cron_busy', false);
variable_set('cron_last', time());
watchdog('cron', t('Cron run completed'));
node_feed(); // この行を追加
2) ファイル名が cron.php である必要はないので、ここでは cron.php のファイル名を rss.php に変更します。
3) 「はてな」へ行きログインします。(アカウントの取得方法等は、ここでは説明しません)
4) http://r.hatena.ne.jp/アカウント名/poweredit で「フィードの新規追加」から URL を登録します。
5) 「次へ」をクリックして「フィードの確認」へ進み、内容が正しければ「追加する」をクリックします。
6) 以下のとおり、追加されました。
7) 次に、RSS リーダのページへ行き、正しく RSS が取得されているかどうかを確認します。
8) 正しく RSS が取得されているのを確認後、自身のサイトに管理者としてログインし、cron のログを表示させ、以下のように「cron は正常に実行されました。」となっていれば成功です。
9) 「はてな」の場合、ほぼ2時間おきに定期受信するようです。 ほとんどのサイトでは、この程度の頻度で充分でしょう。
ですが、もし、さらに頻度を上げたい場合は、複数の同種サービス提供サイトを併用することで実現が可能です。 たとえば、1時間おきに定期受信する2ヶ所のサイトのサービスを併用すると、1時間に2回 cron.php が実行されることになり、30分に1回と等価(あくまでも理論値です)になります。
最後になりますが、ここでご紹介した方法は、cron 等が利用できない場合の最終手段と考え、不必要に乱用することは絶対に避けてください。
また、この方法は、必ず自己責任において利用してください。 この方法を利用した事によって、いかなる不利益を被った場合においても、筆者 imagine 並びに Drupal Japan は一切の責を負いません。
更新履歴
- 2006/08/05 - 初版リリース
- 2006/08/22 - location で rss フィードの uri に飛ばすと、賢いリーダーの場合、転送先の uri に更新してしまうので、直接 node_feed() を呼ぶように変更。