My favorites | 中文(繁體) | Sign in
英文版或許有比此中譯版新的內容

在 Java 使用 Cron 排程工作

透過「應用服務引擎 Cron Service」,您可以定期設定排程工作;這些排程工作會依照您定義的時間或時間間隔執行作業,通常稱作「Cron 任務」。「應用服務引擎 Cron Service 」會自動觸發 cron 任務。舉例來說,您可以使用此服務每天寄送電子郵件報告、每 10 分鐘更新快取資料,或每小時更新摘要資訊。

Cron 任務會在每天的指定時間啟動網址,而啟動的網址所受到的限制和配額與一般 HTTP 要求相同,其中包括要求時間的限制。

應用程式最多可以擁有 20 個排程工作。

關於 cron.xml

應用程式 WEB-INF 目錄下的 cron.xml 檔案 (與 appengine-web.xml 並排) 會控制 Java 應用程式中的 Cron。下列是 cron.xml 檔案的範例:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/recache</url>
    <description>Repopulate the cache every 2 minutes</description>
    <schedule>every 2 minutes</schedule>
  </cron>
  <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday of month 08:30</schedule>
    <timezone>America/New_York</timezone>
  </cron>
</cronentries>

如需說明格式的 XSD 檔案,請參考 SDK 中的 docs/cron.xsd 檔案。

cron.xml 檔案中包含數個任務定義。任務定義必須包含一個 <url> 和一個 <schedule>。而您也可以選擇指定一個 <description>一個 和 <timezone>。這些說明將顯示在管理控制台中。

url 欄位指的是應用程式的 URL。schedule 欄位的格式將於排程格式中詳細說明。

timezone 必須是標準 zoneinfo 時區名稱中的名稱。 如果您並未指定 timezone,則任務會以通用時間慣例 (UTC,也稱為 GMT) 時間執行。

排程格式

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 是數字,hours 或 minutes 則指定時間單位)。重複工作的最短時間間隔為 1 分鐘。

如果您需要更精確的時間安排,請使用此格式:

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

括號是為了更清楚解釋格式,引號則標示出一般文字。

其中:

  • ordinal 指定「1st,2nd,...」或「first,second,...」的逗號分隔清單
  • days 指定日子名稱的逗號分隔清單 (例如,「mon」、「tuesday」,簡稱或完整名稱皆可)
  • monthspec 指定月份名稱的逗號分隔清單 (例如,「jan」、「march」、「sep」)
  • time 指定時間,格式為 24 小時制的 HH:MM。

設定 cron 網址安全性

您可以將權限設定為僅限管理員帳戶存取,以避免使用者存取排程工作使用的 URL。排程工作可以存取僅限管理員使用的 URL。您可以在安全性和驗證中取得更多關於限制 URL 的資訊。下列為在 web.xml 中,將所有以 /cron/ 開頭的網址設定為僅限管理員使用的範例:

    <security-constraint>
        <web-resource-collection>
            <url-pattern>/cron/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

如需更多 web.xml 格式的資訊,請參閱「部署描述元」中的文件。

若要測試 Cron 任務,請以管理員身分登入,並連線到瀏覽器之處理常式的 URL。

來自 Cron Service 的要求也將包含一個 HTTP 標頭:

X-AppEngine-Cron: true

如果您要確保只有 Cron 要求可以觸發您的處理常式,請檢查該標頭。

上傳 cron 任務

您可以使用 AppCfg 上傳 Cron 任務。當您使用 AppCfg update 將應用程式上傳到「應用服務引擎」時,Cron Service 會隨著 cron.xml 內容一起更新。您可以使用 AppCfg update_cron 僅更新 Cron 設定而不上傳其餘的應用程式。

若要刪除所有的 Cron 任務,請將 cron.xml 檔案變更為僅包含:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries/>

管理控制台的 cron 支援

「管理控制台」可讓您檢視 cron 任務的狀態。在側欄選單選取 [Cron Jobs] (Cron 任務) 連結,即可檢視任務狀態,包含任務最後執行的時間以及結果。

您也可以在 [Admin Console] (管理控制台) 選單中,選取 [Admin Logs] (管理記錄) 網頁,以查看 cron 任務的新增或移除時間。

開發伺服器的 cron 支援

開發應用程式伺服器不會自動執行您的 Cron 任務。您可以使用本機桌面的 Cron 或排程工作介面,以 curl 或小型工具來點擊任務的 URL。