GAE/PのCronで定期的に処理を実施する方法

 Google App EngineでCronを登録するには、ルートディレクトリに「cron.yaml」を置くだけです。

例) 毎日午後8時5分に「/cron」を実行する。

--- cron.yaml ---
cron:
- description: cron tast on dev server
  url: /cron
  schedule: every day 20:05
  timezone: Asia/Tokyo
  target: version-1
--- app.yaml ---
…
…
handlers:
- url: /cron
  script: cron_test.py
  login: admin
- url: /
  script: main.py

上記の「schedule」の記載方法は、「Scheduled Tasks With Cron for Python - Google App Engine - Google Code」に詳しく記載されています。「timezone」や「target」は必須ではありませんが、設定しておくと便利です(特に「timezone」を「Asia/Tokyo」にしておかないと運用が面倒になると思います)。

登録したcronについては、管理画面の「Main」 - 「Cron Jobs」から確認することができます。それと、cron用の「handlers」に「login: admin」を設定しておくと、管理者権限が必要になるためURL直打ちで起動させられる危険性が激減します。

「appcfg.py」にもcron用のコマンドがいくつか用意されています。「appcfg.py cron_info [Directory Name]」を打つと、今後cronが走る時間を確認することができます。

$ appcfg.py cron_info cron_test

cron tast on dev server:
URL: /cron
Schedule: every day 20:05
2011-05-29 20:05:00, 23:26:45.489093 from now
2011-05-30 20:05:00, 1 day, 23:26:45.489093 from now
2011-05-31 20:05:00, 2 days, 23:26:45.489093 from now
2011-06-01 20:05:00, 3 days, 23:26:45.489093 from now
2011-06-02 20:05:00, 4 days, 23:26:45.489093 from now

「appcfg.py update_cron [Directory Name]」を打つと、「cron.yaml」のみをuploadすることができます。「appcfg.py update [Directory Name]」でもuploadしますが、停止させたい場合など、cronのみを更新したい場合は「appcfg.py update_cron [Directory Name]」を使う方が望ましいと思います。

登録したcronを削除するには「cron.yaml」の中身を「cron:」だけにして、uploadし直せばできます。ちなみに、「cron.yaml」自体を削除してuploadし直しても、cronは登録されていたままだったので注意が必要です。

例) cronを削除する

—- cron.yaml —-
cron:
#- description: cron tast on dev server
#  url: /cron
#  schedule: every day 20:05
#  timezone: Asia/Tokyo
#  target: version-1

この記事が役に立った場合、シェアしていただけると励みになります!!