X

cronでタスクを定期実行する

Google App Engineでは、定期的にスケジュールを実行するcronサービスが備わっています。
cronを使って実行されるサーブレット(GAEアプリケーションで用意する)はジョブと呼ばれ、cronで記述された時刻に自動実行されます。今回はジョブを自動的に実行するcronの使い方を紹介します。

cronの大事な要素は以下の通りです。
[table “159” not found /]

cronの使い方は続きをどうぞ

cron.xml

cronサービスを利用するためには、WEB-INFディレクトリにcron.xmlを用意します。

サンプルコード

WEB-INF/cron.xml

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/update</url>
    <description>データ更新(5分間間隔)</description>
    <schedule>every 5 minutes</schedule>
  </cron>
  <cron>
    <url>/statistics</url>
    <description>アクセス統計をメール送信</description>
    <schedule>every sunday 00:00</schedule>
    <timezone>Asia/Tokyo</timezone>
  </cron>
</cronentries>

4行目:url要素ではジョブを指定します。サンプルでは/updateを指定しています。
(このURLは、WEB-INF/web.xmlで指定したWebアプリケーションのマッピングに依存します。)
5行目:description要素では、ジョブの内容を示す簡単な説明文です。

11行目:schedule要素でcronサービスによるジョブ実行間隔を指定します。このジョブは1週間単位、日曜日の0時に実行する設定になっています。
12行目:cronを実行する基準となるタイムゾーンを指定します。

スケジュール指定

cronで実行するジョブのスケジュールは英語を使った特殊な記述で表現します。

schedule要素のサンプル

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

これらの表記例では、every N (hours|mins|minutes)といった間隔で指定することが可能です。
最小実行間隔は1分ですが、サービス負荷を考えて実行間隔を決めてる必要があります。

cronへのアクセス禁止

cron用URLにユーザーが自由にアクセスできては意図しないタイミングでジョブが実行されてしまいます。
セキュリティを向上させるために、ユーザー認証などでURLを保護してください。

Googleアカウントでユーザ認証する
を参考に以下のように、web.xmlを書き換えることで、cronサービスのジョブを保護できます。
web.xml

    <security-constraint>
        <web-resource-collection>
            <url-pattern>/cron/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>Googleアカウント</role-name>
        </auth-constraint>
    </security-constraint>

3行目:保護するURLを指定します
6行目:アクセス許可を与えるGoogleアカウントを指定します

以上、おつかれさまでした!

mhidaka: Software Engineerだよ。DroidKaigi Organizer / Androidと組込とRe:VIEW。techbooster主宰。mhidaka's writings http://booklog.jp/users/mhidaka 技術書典! http://techbookfest.org