2009-10-01 170 views
3

我需要每天在小時(00:00,01:00,02:00,...,23:00)每小時運行一次任務,但似乎無法在App Engine的文檔中找到如何執行此操作的示例。使用App Engine的cron API每小時運行一次任務

有一個每小時都會詢問的例子,但這不適合,因爲那個小時的「開始」取決於您何時部署應用程序。也就是說,如果我在4:37 PM部署,cron腳本將在5:37,6:37,...而不是5:00,6:00,...

執行到目前爲止只有看起來可以工作的方式是有24個不同的cron條目,一個用於每天在特定時間運行的特定小時。

有沒有人知道任何會讓我使用「每小時00:00」甚至「每天00:00,01:00,... 23:00」的時間表?

+2

我相信這是一個設計決定,以防止服務器在00:00運行每個人的任務並使服務器負載過重。 – geoffspear 2009-10-02 01:48:24

回答

5

你可以做到這一點,並給予了準確的時間,但如果將接近...

cron: 
- description: Description of what you want done... 
    url: /script/path/goes/here 
    schedule: every 60 minutes synchronized 
    timezone: America/New_York 

以下(例如,從應用程序,我調試運行來)是日誌的屏幕截圖,應用程序現在沒有流量, 99%的條目都是cron條目。

enter image description here

--- 編輯 ---

只是重新閱讀文檔,以及也許這可能會更好,

schedule: every 60 minutes from 00:00 to 23:59 
+1

似乎它們是相同的:「你可以使用文字」同步「作爲從00:00到23:59的同義詞」 – 2011-09-14 11:20:19

+0

我還沒有測試,但也許它是。 – bdavenport 2011-09-14 13:44:44

-1

查看文檔,我同意你的24 cron入口的想法是唯一可以工作的記錄方式。不理想,但應該工作。

+0

20個任務不會涵蓋全部24個小時:( - 「一個應用程序最多可以有20個計劃任務。」 – 2011-09-14 11:26:05

0

該文檔說,你可以有20個cron條目,所以你不能在一天中的每個小時都有一個條目。

您可以每分鐘運行一次您的任務,並檢查它是否是一小時的第一分鐘 - 否則退出。

3

不幸的是,cron語法不允許您爲小於一天的時間間隔指定時間。但是,您可以執行的操作是使用Task Queue。或者:

  1. 有一個任務隊列條目,當它運行時,將'倒計時'設置爲秒數,直到下一次運行爲止。
  2. 有一個每日cron作業,每次24小時taskqueue條目在您希望它運行的每個時間。
+0

如果有人很好奇,這種方法每天在00:01運行一個任務,該任務計劃任務運行這一天(使用'eta'參數)工作得很好 – 2009-10-07 17:15:34