Google App Engineでのcron処理

裏のバッチ処理なんかで使われるcronジョブの作り方。

http://code.google.com/intl/ja/appengine/docs/python/config/cron.html

基本的に書いてある通りなんだけど、ちょっと解かりづらいところがあったのでまとめ。

ファイル構成

  • app.yaml(アプリケーション設定)
  • cron.yaml(cron設定)
  • index.yaml(インデックス設定)
  • batch.py(実際に動くスクリプト


app.yaml

application: cron
version: 1
runtime: python
api_version: 1

handlers:
- url: /cron/job #ジョブを呼び出すURL
  script: ./batch.py #処理するスクリプト
  login: admin #管理者権限で処理

URLへのアクセスを管理者アカウントに制限するため、
login: admin
を指定する。
ユーザが任意に実行しても良い場合もあるかも知れないが。

cron.yaml

cron:
- description: cron sample job #ジョブ名
  url: /cron/job #ジョブを呼び出すURL
  schedule: every 10 mins #ジョブ実行のスケジュール

schedule:の書き方は上記リンクを参照してください。

index.yamlはデフォルト。

batch.py

#!/usr/bin/env python

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from datetime import *

class CronJob(webapp.RequestHandler):
    def get(self):
        self.response.out.write(datetime.now())

def main():
    application = webapp.WSGIApplication([('/cron/job', CronJob)], debug=True)
    util.run_wsgi_app(application)

ここでは日時を表示するだけです。

ローカルでの実行は
http://localhost:8080/_ah/admin/cron
にアクセスする事で確認・実行が可能です。
(ポートはプロジェクトによって異なります)