2009-10-01 172 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