透過 App Engine Cron 服務,您可以定期設定排程工作;這些排程工作會依照您定義的時間或規律間隔執行作業,通常稱為「Cron 工作」。App Engine Cron Service 將自動觸發 Cron 工作。例如,您可以使用 Cron 工作每天傳送一次電子郵件報告,或是每 10 分鐘更新某些快取資料,也可以每小時重新整理一次摘要資訊。
Cron 工作會按照既定排程對網址發出 HTTP GET
要求。該網址的處理常式會在收到呼叫時執行邏輯。Cron 工作要求和推送工作佇列遵循一樣的限制。
事前準備
如要部署或更新排程,您的帳戶需要下列其中一種 IAM 角色:
- 擁有者
- 編輯者
您可以在 Google Cloud Platform 主控台中的「IAM」頁面中設定權限。
建立 Cron 工作
- 在應用程式的根目錄中建立
cron.yaml
檔案 (以及app.yaml
)。 在檔案中新增一或多個
<cron>
項目,然後定義工作的必要元素 (包括不可或缺的<url>
和<schedule>
元素)。以下範例會建立一個每天執行的基本 Cron 工作:
cron: - description: "daily summary job" url: /tasks/summary target: beta schedule: every 24 hours
目標規格是服務/版本的名稱,填或不填均可。如果指定目標,就會在應用程式的主機名稱後加上目標,將工作轉送到該服務/版本。如不指定目標,則這項工作會在已經完成流量設定的
default
服務版本中執行。建立 Cron 工作網址的處理常式。此處理常式應執行您要排程的任何工作,並回應代表成功的 HTTP 狀態碼,這個狀態碼介於 200 和 299 (含首尾) 之間。可能會傳回其他狀態碼,也可以使用這些狀態碼重試 Cron 工作。
在開發伺服器中測試 Cron 工作
本機開發伺服器不會自動執行您的 Cron 工作。您可以直接對 Cron 工作的網址發出要求以測試功能。您可以使用 curl 或類似的工具,以本機 Cron 或排程工作的介面觸發工作網址。
您可以使用本機開發伺服器的管理員介面,前往 http://localhost:8000/cron
查看 Cron 工作。
重試失敗的 Cron 工作
如果 Cron 工作要求處理常式傳回的 HTTP 狀態碼不在 200–299 (含首尾) 範圍內,則 App Engine 會將工作視為失敗。根據預設,除非傳回的狀態代碼是 503,否則一律不重試失敗的工作,若傳回 503,則會每分鐘重試一次,直到工作成功或傳回介於 200-299 這個範圍內的狀態代碼。
如要設定重試失敗的工作:
- 在
cron.yaml
檔案中加入retry_parameters
區塊。 在
retry_parameters
區塊中選擇並設定重試參數。例如,以下
cron.yaml
範例檔包含一項 Cron 工作,這項工作的設定是最多重試 5 次 (預設值),開始輪詢時間是 2.5 秒,每次加倍。cron: - description: "retry demo" url: /retry schedule: every 10 mins retry_parameters: min_backoff_seconds: 2.5 max_doublings: 5
部署 Cron 工作
若要部署 cron.yaml
設定檔中指定的 Cron 工作,請執行以下指令:
gcloud
gcloud app deploy cron.yaml
appcfg
如果您使用的是原始 App Engine SDK,請執行以下指令:
appcfg.py update_cron [YOUR_APP_DIR]
刪除所有 Cron 工作
如要刪除所有 Cron 工作,請按照下列指示操作:
將
cron.yaml
檔案的內容改為:cron:
將
cron.yaml
檔案部署至 App Engine。
設定 Cron 網址安全性
Cron 處理常式單純是在 app.yaml
中定義的一般處理常式。如要避免使用者存取排程工作所使用的網址,可以限制只有管理員帳戶才有存取權。已排程工作可以存取只限管理員存取的網址。您可以在 app.yaml
的處理常式設定中新增 login: admin
,藉此限制網址。
app.yaml
中的範例看起來可能會與以下類似:
runtime: python27
api_version: 1
handlers:
- url: /report/weekly
script: reports.app
login: admin
如要進一步瞭解如何要求登入或管理員狀態,請參閱 app.yaml 參考資料。
如要測試 Cron 工作,請以管理員身分登入,並透過瀏覽器造訪處理常式的網址。
來自 Cron 服務的要求也會包含 HTTP 標頭:
X-Appengine-Cron: true
X-Appengine-Cron
標頭是由 Google App Engine 在內部設定的。若您的要求處理常式找到這個標頭,處理常式即可信任這項要求是 Cron 要求。若外部使用者對應用程式發出的要求出現此標頭,將會移除此標頭,除非這是應用程式登入管理員發出的要求,因為只有登入管理員能夠針對測試目的設定標頭。
Google App Engine 會從 IP 位址 0.1.0.1
發出 Cron 要求。
呼叫 Google Cloud Endpoints
您無法在 Cron 工作的 url
欄位中指定 Google Cloud 端點。如果要讓 Cron 工作呼叫 Google Cloud 端點,請針對應用程式中由處理常式提供的目標發出要求,並使用處理常式程式碼呼叫端點類別及方法。
在 GCP 主控台中查看 Cron 工作
您可以在 GCP 主控台的「Cron jobs」(Cron 工作) 頁面查看 Cron 工作的排程。
您也可以在記錄頁面查看之前新增或移除 Cron 工作的時間。
瞭解詳情
如要進一步瞭解如何定義 Cron 工作,請參閱 cron.yaml 參考資料。