2013-04-06 25 views
8

我正在开发一个ASP.NET应用程序,它将上载到Azure上。如果我在Azure上有多个实例,并且想运行我的应用程序所需的cron作业。然后,我只想确认该cron作业是否只运行一次,或者每个实例会自行运行该cron?每个天蓝色的实例是否运行cron?

例如:如果我在Azure上有4个云服务实例,并且我的应用程序每天在晚上11:00运行一个cron作业。所以,我只想确认一下,如果该cron只运行一次,或者每个实例都会自行运行该cron(即cron将运行4次,或者每个实例可以说一次)?

请建议。

回答

3

在您的示例中,所有4个实例都会尝试并运行cron作业。如果你想只有一个实例运行这个工作,你需要实现某种“锁定”机制。通常人们做的是每个实例都会试图在同一个blob上获得1分钟的租约。只有一例会成功获得租约。你可以把只有能够获得租约的实例执行该cron作业的逻辑。

4

到目前为止,我发现了3种做cron作业的方式,但是它们都需要一定程度的管理可能运行任务的多个实例。

到目前为止,我已经使用了选择:

  1. Windows任务调度程序 - 创建启动脚本,将用户和任务的安排吧。点击此处了解详情:Running Azure startup tasks as a real user这里:Building a Task Scheduler in Windows Azure

  2. 使用Quartz.Net - 这我开始,但随后移动到Windows任务调度程序,但它可能为你工作,因为你可以自定义的东西更容易。更多的信息在这里:Using Quartz.net to Schedule Jobs in Windows.Azure Worker Roles

  3. 在移动服务中使用新的工作计划。我没有用过这个,但是当我去年年底阅读这个博客时:Job Scheduling in Windows Azure我把它放在我的心理清单上,看看下一次我需要一个工作调度程序。它仍然有点新,但它也可以帮助你。

1

正如其他用户所说,有很多方法可以做到这一点。我添加了一些建议。您是否开发了Cloude服务Web角色或Web站点?如果是前者,最简单的方法是创建1个工作者角色(只有一个)并从那里运行任务。它后者,你需要一个外部的“触发器”:你可以使用调度器(通过Aditi)。你可以从Azure商店获得它(有一个免费的馅饼)。

0

如果某个角色(Web/Worker/VM角色)具有多个实例,则表示您拥有相同的Windows Server VM帐户(该版本取决于您配置的哪个guest OS版本)。每个虚拟机将运行完全相同的应用程序代码(如ASP.NET Web应用程序),所有对此角色的请求都将进行负载均衡,并且其中一个虚拟机将根据循环策略切断请求。

所以如果你的cron作业只需要运行一次,就像Guarav所说的那样,你需要一些锁定机制让你的角色实例运行它。

相关问题