2009年11月27日

JRuby + Google App Engine の環境での Cron 実行

GAEにはCronの仕組みが用意されているので、Jrubyからはどうやって利用するのか調べてみた。

結論としてはとても簡単で、プログラム本体は何もする必要がなく、設定用の cron.xml というXMLファイルをWEB-INFフォルダの直下に置けばよいだけだった(APIリファレンス)。
ファイルの置き場所 = WEB-INF/cron.xml
cron.xmlの中身には起動したいメソッドに対応しているURLとタイミングを記述するだけ。description はGAEの管理画面で表示される cron ジョブの説明文となる。

/myapp/showというURLを毎分起動する場合
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cron>
<url>/myapp/show</url>
<description>this is app description</description>
<schedule>every 1 minutes</schedule>
<timezone>Asia/Tokyo</timezone>
</cron>
</cronentries>
実行タイミング指定には多彩な記述方法が用意されている。
every 5 minutes
every 12 hours
2nd,third mon,wed,thu of march 17:00
every monday 09:00
1st monday of sep,oct,nov 17:00
every day 00:00
なお、時刻の指定に使う timezoneはタグで指定することができる(参考:wikipediaのzoneinfo情報) timezone を何も指定していないと GMT になるそうだ。

cronが実行されてURLが叩かれる際のヘッダーには下記のような特殊ヘッダーが付加されるので、当該URLをcron以外の一般のユーザーには叩かれたくない場合の制御に使うことができる(他にも、web.xmlでアクセス制限する方法もあるらしい)
X-AppEngine-Cron: true

appcfgでアプリは何もいじらず、cronの変更だけを反映することができるらしい。
AppCfg.rb.bat update_cron

cronはGAEの管理画面からは追加も削除もできないのだが、cronを削除をしたい場合は cron.xml の内容を下記のようにして更新すればよいらしい。
<?xml version="1.0" encoding="UTF-8"?>
<cronentries/>


maru_tak at 23:01│Comments(0)TrackBack(0)

トラックバックURL

コメントする

名前
URL
 
  絵文字