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]