お気に入り | 日本語 | ログイン

Java 用の cron を使用したスケジュール タスク

App Engine Cron サービスを使用し、指定した時間または一定の間隔で実行されるタスクのスケジュールを設定できます。これらのタスクは一般的に「cron ジョブ」と呼ばれます。cron ジョブは App Engine Cron サービスにより自動的に起動されます。この機能を利用すれば、日報のメール送信、キャッシュ データの 10 分間隔での更新、または集計情報の 1 時間ごとの更新などが可能になります。

cron ジョブは一日の中の指定した時間に URL を起動します。cron が起動した URL は、リクエスト時間の制限など、通常の HTTP リクエストと同じ制限や割り当てが適用されます。

アプリケーションには最大 20 個のタスクをスケジューリングできます。

cron.xml について

アプリケーションの WEB-INF ディレクトリの cron.xml ファイル(および appengine-web.xml)は Java アプリケーションの cron を制御します。次に、cron.xml ファイルのサンプルを示します。

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/recache</url>
    <description>Repopulate the cache every 2 minutes</description>
    <schedule>every 2 minutes</schedule>
  </cron>
  <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday of month 08:30</schedule>
    <timezone>America/New_York</timezone>
  </cron>
</cronentries>

フォーマットを表す XSD については、SDK のファイル docs/cron.xsd をご覧ください。

cron.xml ファイルは、複数のジョブ定義から構成されます。ジョブ定義には <url> および <schedule> が必要です。また、オプションで <description> および <timezone> が指定できます。この説明は管理コンソールで表示されます。

url の URL フィールドは、アプリケーション内の URL の 1 つです。schedule フィールドのフォーマットは、スケジュール フォーマットで詳細に説明します。

タイムゾーンには、標準の zoneinfo のタイムゾーン名を記述します。タイムゾーンを指定しないと、ジョブは UTC(GMT とも呼ばれます)で実行されます。

スケジュール フォーマット

cron のスケジュールはシンプルな英語に近い形式で指定します。

次に、スケジュールの例を示します。

every 5 minutes
every 12 hours
2nd,third mon,wed,thu of march 17:00
every monday of month 09:00
1st monday of sep,oct,nov 17:00

ジョブを指定された時間に繰り返し実行する必要が無く、同じ間隔で繰り返し実行する必要がある場合は、every N (hours|mins|minutes) を使用します。ここで、N は数値を、hours または minutes で時間の単位を指定します。タスクを実行する最小の間隔は 1 分です。

さらに具体的に間隔を指定する場合、次のようにスケジュールを指定できます。

("every"|ordinal) (days) "of" (monthspec) (time)

かっこ([ ])は説明のために記述しています。また、クォートはリテラル表記を表します。

ここで

  • 「ordinal」には「"1st", "first"」などの条件をカンマ区切りのリストを指定します。
  • 「days」には曜日をカンマ区切りのリストで指定します(「"mon","tuesday"」など。長いフォーマット、短いフォーマットのいずれも使用できます)。
  • 「monthspec」には月の名前をカンマ区切りのリストで指定します(「"jan","march","sep"」など)。
  • 「time」には一日の中の時間を 24 時間表記で HH:MM の形式で指定します。

cron のための URL のセキュリティ

スケジュール タスクが使用する URL をユーザーがアクセスしないように、その URL へのアクセスを管理者アカウントに制限できます。スケジュール タスクは管理者のみに許可された URL にアクセスできるように設定されています。URL への制限についてはセキュリティと認証をご覧ください。次に、web.xml で使用する、/cron/ から始まるすべての URL を管理者のみのアクセスに制限する例を示します。

    <security-constraint>
        <web-resource-collection>
            <url-pattern>/cron/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

web.xml のフォーマットの詳細は、配備記述子のドキュメントをご覧ください。

cron ジョブをテストするには、管理者としてログインし、ブラウザからハンドラの URL にアクセスします。

cron サービスからのリクエストには HTTP ヘッダーも含まれます。

X-AppEngine-Cron: true

cron リクエストのみがハンドラを起動するように設定されていることを確認するには、ヘッダーをご覧ください。

cron ジョブのアップロード

cron ジョブのアップロードには AppCfg を使用できます。AppCfg update を使用して App Engine にアプリケーションをアップロードすると、cron サービスは cron.xml の内容で更新されます。AppCfg update_cron を使用し、アプリケーション全体ではなく cron の設定だけを更新できます。

すべての cron ジョブを削除するには、cron.xml が次の内容のみを含むように変更します。

<?xml version="1.0" encoding="UTF-8"?>
<cronentries/>

管理コンソールでの cron サポート

管理コンソールを使用し、cron ジョブの状態を表示できます。サイド メニューの「Cron Jobs」リンクを選択し、ジョブの状態を表示します。表示結果には、ジョブの最終実行時間とその結果が含まれます。

管理コンソール メニューの「Admin Logs」ページを選択し、cron ジョブが追加または削除された時間を表示します。

開発サーバーでの cron サポート

開発用 appserver では cron ジョブは自動的に実行されません。代わりに curl などのツールを利用してジョブの URL にアクセスするには、ローカル デスクトップの cron またはスケジュール タスク インターフェースを使用できます。