我正在创建一个新的Azure WebJob项目 - 它似乎是一个可以作为Web作业运行的控制台应用程序的精美版本。
我希望此作业基于计划运行,但在Main()
方法中 - 请参阅下文 - Microsoft为您提供host.RunAndBlock()
作业以便连续运行。
如果我希望工作定期运行,我是否需要更改?
static void Main()
{
var host = new JobHost();
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
答案 0 :(得分:28)
使用Azure WebJobs SDK时,您可以使用TimerTrigger
来声明按计划运行的作业功能。例如,这是一个在启动时立即运行的功能,然后每两个小时运行一次:
public static void StartupJob(
[TimerTrigger("0 0 */2 * * *", RunOnStartup = true)] TimerInfo timerInfo)
{
Console.WriteLine("Timer job fired!");
}
您可以通过安装Microsoft.Azure.WebJobs.Extensions nuget包获得TimerTrigger
和其他扩展程序。有关TimerTrigger
以及该程序包中其他扩展程序以及如何使用它们的更多信息,请参阅azure-webjobs-sdk-extensions repo。使用TimerTrigger
时,请务必在启动代码中添加对config.UseTimers()
的调用以注册扩展程序。
使用Azure WebJobs SDK时,将代码部署到连续 WebJob,并启用 AlwaysOn 。然后,您可以在该WebJob中添加所需的许多预定功能。
答案 1 :(得分:4)
按计划触发WebJob的一种简单方法是将其编码为常规控制台应用程序,只需将带有基于cron的调度配置的“settings.job”添加到项目中。 例如,以下定义将每5分钟触发一次:
{
"schedule": "0 */5 * * * *"
}
无需使用JobHost,只需确保将WebApp配置为“始终开启”即可。 然后,您应该将该作业部署为触发的WebJob。
答案 2 :(得分:1)
我知道有两种方法可以安排网络作业,而不是让它连续运行:
1.使用CRON表达式创建计划的WebJob
2.使用Azure Scheduler创建计划的WebJob
您可以在此处找到两种方式的文档:
https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/
我认为您需要RunAndBlock
以便预定或续作,但如果按需提供工作,则可以将其删除