cron

ちょっとハマったのでメモしておく。

Google App Engine(Python)でcronを動かすには、cron.yamlを記述すればよい。こちらのGoogle説明書にあるとおり。

ただし...Django使って組み上げる場合はcron.yamlでの記述に注意が必要。例えばGoogle説明書にある

cron:
- description: daily summary job
  url: /tasks/summary
  schedule: every 24 hours
- description: monday morning mailout
  url: /mail/weekly
  schedule: every monday 09:00
  timezone: Australia/NSW

は、ブラウザからテストする分には問題ないが、cronで流すとコケる。なぜなら、djangoは/tasks/summaryというリクエストを一旦/tasks/summary/にRedirectかけようとするから。そしてcronはredirectを追うことができないので、コンソールにはFailedという不親切な一行が残るのみ。view本体はキックされないのでログも残らない。正しくは

cron:
- description: daily summary job
  url: /tasks/summary/
  schedule: every 24 hours
- description: monday morning mailout
  url: /mail/weekly/
  schedule: every monday 09:00
  timezone: Australia/NSW

のように、urlエントリを/で閉めること。これに気づくのに半日かかった orz