python,cron,gae,bae

http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/python/cronphp

簡介

Cron(定時任務)是雲環境爲開發者提供的分佈式環境下的定時任務功能,能夠經過指定一個URL、時間表和相關參數來建立一個任務,系統將按照時間表的規則調用用戶指定的URL。python

管理

百度開發者中心 登陸後 進入「管理中心」,選擇「管理」已託管在BAE上的應用,在「雲環境(BAE)->服務管理->Cron(定時任務)」便可看到Cron服務的管理頁面。建立定時任務並輸入相關參數後便可在代碼中直接調用,以下圖:api

CRON.png 
圖:Cron管理瀏覽器

建立相關選項說明

1. URL:緩存

用戶要執行的任務的地址。例如http://cron.duapp.com安全

2. 執行方法:服務器

get 前面指定的URL 將被以get方式執行。 post 前面指定的URL 將被以post方式執行。app

3. 相關參數:curl

只有在執行方法爲post時有意義。並以post方式執行所攜帶的參數做爲相關參數。例如 name=li&age=23&sex=f分佈式

4. 執行次數:

任務計劃被執行的次數,若是輸入0表示任務將永遠被執行。

5. 時間表:

時間表用來定義任務執行的時間規則。符合Linux CronTab

*    *    *   *    * 
-    -    -   -    -
|     |     |   |    |
|     |     |   |    +----- day of week (0 - 6) (Sunday=0)
|     |     |   +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)
f1   f2   f3   f4   f5   program 

*其中 f1 是表示分鐘,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份,f5 表示一個星期中的第幾天。program 表示要執行的程式。 

*當 f1 爲 * 時表示每分鐘都要執行 program,f2 爲 * 時表示每小時都要執行程式,其他類推 

*當 f1 爲 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,f2 爲 a-b 時表示從第 a 到第 b 小時都要執行,其他類推 

*當 f1 爲 */n 時表示每 n 分鐘個時間間隔執行一次,f2 爲 */n 表示每 n 小時個時間間隔執行一次,其他類推 

*當 f1 爲 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,f2 爲 a, b, c,... 時表示第 a, b, c...個小時要執行,其他類推

*week和day都有,則取交集。

例如:30 9 * * *   表示天天早上9點30分執行

參考網站 http://www.adminschoice.com/crontab-quick-reference

6. 回調URL:

每次任務被執行後,cron系統將以post請求方式回調該URL。用戶能夠在該URL的服務中得到2個參數,URL和reason。URL 指建立任務時的URL。reason 表示執行是否成功,有3種值:3成功,4失敗,5超時。

限制

目前,Cron服務存在如下限制:

限制項
單個開發者最大cron數 20
任務名稱 名稱不能爲空,只能包含半角英文字母和數字,最大長度不能超過128個字符。且同一個用戶所建立的Cron不能有同名


https://developers.google.com/appengine/docs/python/config/cron?hl=zh-cn

Cron 計劃任務(Python 版)

經過使用 App Engine Cron 服務,您能夠配置在指定時間或按固定間隔執行的按期計劃任務。這些任務一般稱爲 Cron 做業。這些 Cron 做業是由 App Engine Cron 服務自動觸發的。例如,您能夠天天使用該服務發送報告電子郵件,每 10 分鐘更新一些緩存數據,或者每小時更新一些摘要信息。

Cron 做業將在一天中的給定時間使用 HTTP GET 請求調用網址。Cron 調用的網址具備與普通 HTTP 請求相同的限制和配額,包括請求時間限制。僅爲默認應用程序版本運行 Cron 做業。

應用程序最多能夠有 20 個計劃任務。

關於 cron.yaml

cron.yaml 文件位於應用程序的根目錄(與 app.yaml 在一塊兒),用於配置 Python 應用程序的計劃任務。如下是 cron.yaml 的示例文件:

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.yaml 的語法爲 YAML 格式。有關該語法的詳細信息,請參閱 YAML 網站

cron.yaml 文件由若干做業定義組成。做業定義必須具備 url 和 schedule。您也能夠視須要指定 description 和 timezone。此說明將在管理控制檯和開發服務器的管理界面中提供。

url 字段指定應用程序中將由 Cron 服務調用的網址。有關詳細信息,請參閱保護 Cron 網址的安全。計劃字段的格式在計劃格式中有更詳細的介紹。

時區名稱應爲標準 zoneinfo 時區名稱。若是未指定時區,計劃將使用通用協調時間(UTC,也稱爲格林威治標準時間 GMT)。

計劃格式

Cron 計劃是使用相似英語的簡單格式指定的。

下面是一些計劃示例:

every 5 minutes
every 12 hours
2nd,third mon,wed,thu of march 17:00
every monday 09:00
1st monday of sep,oct,nov 17:00
every day 00:00

若是不須要在特定時間運行重複性做業,而是隻需按固定間隔運行這些做業,請使用如下形式:every N (hours|mins|minutes),其中 N 是一個數字,hours 或 minutes 指定時間單位。能夠將運行任務的最短間隔指定爲 1 分鐘。

默認狀況下,間隔計劃從完成上一做業後的下一間隔開始。若是但願天天按固定間隔啓動做業而與完成上一做業的時間無關,請在間隔描述中添加單詞 synchronized。例如:

every 2 hours synchronized

這會天天按 2 小時的間隔運行 12 次做業,從午夜開始。

若是要指定更具體的時間,您能夠按如下方式指定計劃:

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

括號僅用於說明目的,引號表示字面值。

其中:

  • ordinal 指定「1st」或「first」等(兩種形式均可以)的逗號分隔列表
  • days 指定星期(如「mon」、「tuesday」,接受全稱和縮寫形式)的逗號分隔列表;「every day」至關於「every mon,tue,wed,thu,fri,sat,sun」
  • monthspec 指定月份名稱(如「jan」、「march」、「sep」)的逗號分隔列表若是省略,則表示每月。也就是說:「month」表示每月,例如,「1,8,15,22 of month 09:00」。
  • time 指定一天中的時間,採用 24 小時制的 HH:MM 格式。

保護 Cron 網址安全

cron 處理程序只是一個在 app.yaml 中定義的普通處理程序。您能夠經過將訪問權限限制爲僅限管理員賬戶來防止用戶訪問計劃任務使用的網址。計劃任務能夠訪問僅限管理員的網址。您能夠經過在 app.yaml 中將 login: admin 添加處處理程序配置來限制網址。

app.yaml 中的一個示例可能以下所示:

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

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

注意:儘管 cron 做業可使用以 login: admin 加以限制的網址路徑,但不能使用以 login: required 加以限制的網址路徑。

有關詳細信息,請參閱 Python 應用程序配置:須要登陸或管理員身份

要測試 cron 做業,請以管理員身份登陸,並在瀏覽器中訪問處理程序的網址。

來自 Cron 服務的請求也將包含 HTTP 標頭:

X-AppEngine-Cron: true

若是但願確保僅 cron 請求可以觸發處理程序,您應該檢查該標頭。

Cron 和應用程序版本

Cron 請求始終發送到默認應用程序版本。

上傳 Cron 做業

您可使用 appcfg.py 上傳 cron 做業和查看關於定義的 cron 做業的信息。當您使用 appcfg.py update 將應用程序上傳到 App Engine 時,Cron 服務將根據 cron.yaml 的內容進行更新。您可使用 appcfg.py update_cron 只更新 cron 配置,而無需上傳應用程序的其他部分。

要刪除全部 cron 做業,請將 cron.yaml 文件更改成只包含如下內容:

cron:

您可使用 appcfg.py cron_info 命令顯示 cron 做業的解析版本,包括做業將運行的次數。

若是但願 appcfg.py cron_info 正確處理您指定的時區,請安裝 pytz 包。

管理控制檯對 Cron 的支持

經過使用管理控制檯,您能夠查看 Cron 做業的狀態。請從側面菜單中選擇「Cron 做業」連接以查看做業狀態,包括上次運行做業的時間以及做業結果。

也能夠從管理控制檯菜單中選擇「管理日誌」頁以查看添加或刪除 Cron 做業的時間。

開發服務器中的 Cron 支持

使用 Python SDK 時,您能夠經過開發應用程序服務器提供的管理界面查看 /_ah/admin/cron 中的 cron 做業。

開發服務器不會自動運行您的 cron 做業。您可使用本地桌面的 cron 或計劃任務接口經過 curl 或相似工具來觸發做業的網址。

相關文章
相關標籤/搜索