Go for it!

モーターサイクルと自転車とキャンプの日々。

GAEでcron

Google App Engineでのcronのドキュメントをざっくり翻訳してみたよ。わたしの英文理解力は壊滅的なので覚悟して読むこと(原文もあわせて読むとよい)。

Cron Serviceの処理方式を見た限りでは、定期的にURLをつつく実装でイマイチ美しくない。当然、実行時間も8秒程度に制限されるってことで良いんだろうな…。ちょっと残念。

ま、cronが使えないより使えるほうがずっとマシなので、これから活用してみます。

[ad#text_only_square]

About cron.yaml - cron.yamlについて cron.yamlはアプリケーションのルートディレクトリ(app.yamlがあるところ)に設置し、アプリケーションタスクスケジュールを設定することが出来る。

例: [code lang=“python”] cron: - description: daily summary job url: /tasks/summary schedule: every 24 hours - description: monday morning mailout url: /mail/weekly schedule: every monday 9:00 timezone: Australia/NSW [/code]

cron.yamlはYAML形式で記述する。YAML記法の詳細についてはYAMLのウェブサイトを見ること

cron.yamlファイルはいくつかのジョブの定義から構成される。ジョブの定義はURLを含まなければならない。説明文とタイムゾーンをオプションとして付加することが出来る。説明文は管理コンソール、開発サーバの管理インターフェースから参照することが出来る。

URLフィールドはcronサービスにより呼び出されるアプリケーションのURLを定義する。詳細はSecurering URLs for Cron(後述)を参照すること。scheduleフィールドはThe Schedule Format(後述)を参照すること。

timezoneは標準的なzoneinfoのtimezone名を利用する。もしtimezoneを記述しなければ、スケジュールはUTC(GMT - 世界標準時)に実行される。

The Schedule Format - スケジュールフォーマット 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は時、分の単位である。最短のタスク実行間隔は1分。

もし特定のタイミングで実行したければ、次の形式を利用することが出来る。

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

※括弧内は例、クォートは具体的な指示である

具体的には:

  • ordinalはカンマ区切りで1st, firstなどの文字を定義する
  • daysはカンマ区切りで曜日を定義する(mon, turesdayなど。短い形式でも、長い形式でもOK)
  • monthspecはカンマ区切りで月を定義する(jan, march, sepなど)
  • timeはHH:MM(24時間表記)の時刻を定義する

Securing URLs for Cron - cronのためのURL cronハンドラはapp.yamlで定義される通常のハンドラである。スケジュールタスク用のURLは、管理者以外のユーザからのアクセスを制限することが出来る。スケジュールタスクは管理者のみがアクセス可能なURLとなる。app.yaml内にlogin: adminを追加することで、URLへのアクセスを制限することが出来る。

例: [code lang=“python”] application: hello-cron version: 1 runtime: python api_version: 1

handlers: - url: /report/weekly script: reports.py login: admin [/code]

より詳しい情報はPython Application Configuration: Requiring Login or Administrator Statusを見ること。

cronジョブをテストするには、管理者としてログインしてスケジュールタスクのURLをブラウザで開けばよい。

cronサービスからのリクエストには以下のHTTPヘッダが含まれる。

X-AppEngine-Cron: true

もしスケジュールタスクをcronサービスからのリクエストからのみ実行したい場合は、このHTTPヘッダをチェックすればよい。

Uploading Cron Jobs - cronジョブの登録 cronジョブの登録、定義済みのcronジョブの参照はappcfg.pyを利用することが出来る。appcfg.py updateコマンドを実行してアプリケーションデプロイを行ったときに、cron.yamlに書かれた内容でcronサービスが更新される。アプリケーションデプロイを行わずにcronジョブを更新するにはappcfg.py update_cronと実行する。

全てのcronジョブを削除するにはcron.yamlに次のようにだけ書く。

cron:

appcfg.py cron_infoコマンドにより、取り込み済みのcronジョブの実行予定を見ることが出来る。

もしappcfg.py cron_infoコマンド実行結果で正しいタイムゾーンを表示したい場合はpytzパッケージをインストールすること。

Cron Support in the Admin Console - 管理コンソールでのcronのサポート 管理コンソールはcronジョブの参照機能を提供してくれる。再度メニューのcron jobsリンクを選択することで、cronジョブの状態、最後に実行したcronジョブの結果を見ることが出来る。

管理コンソールメニューのadmin logsページから、いつcronジョブの追加、削除が行われたか確認することが出来る。

Cron Support in the Development Server - 開発サーバでのcronサポート Python SDKを利用している場合、dev_appserverから管理インターフェースが提供され、cronジョブを/_ah/admin/cronで見ることが出来る。

開発サーバは登録されたcronジョブを自動的に実行しない。ローカルのcronデーモンやスケジュールタスクなどから、curlなどのツールを用いてcronジョブを実行することができる。


かなり適当な翻訳ですが7割くらいは合ってると思います。突っ込み歓迎。

[ad#text_wide]