【问题标题】:Azure Timer Trigger: Cron expression for every hour on the hourAzure 计时器触发器:每小时的 Cron 表达式
【发布时间】:2018-11-22 00:42:00
【问题描述】:

每小时的 cron 表达式是什么? 我试过这个'0 0 *? * *' 但它抛出了一个错误 我有一个 Azure 函数计时器触发器

下面的这个表达式每分钟运行一次。

public static void Run([TimerTrigger("0 * * * * *")]TimerInfo myTimer, TraceWriter log)

这是我尝试“0 0 * ? * * *”和“0 0 * ? * *”时收到的错误

[11/22/2018 12:45:29 AM] 发生 ScriptHost 错误 [11/22/2018 12:45:29 AM] Microsoft.Azure.WebJobs.Host:错误索引方法“Currencies.Run”。 Microsoft.Azure.WebJobs.Extensions:计划表达式 '0 0 * ? * * *' 未被识别为有效的 cron 表达式或时间跨度字符串。 [11/22/2018 12:45:29 AM] 错误索引方法“Currencies.Run” [11/22/2018 12:45:29 AM] Microsoft.Azure.WebJobs.Host:错误索引方法“Currencies.Run”。 Microsoft.Azure.WebJobs.Extensions:计划表达式 '0 0 * ? * * *' 未被识别为有效的 cron 表达式或时间跨度字符串。

【问题讨论】:

  • 我试过这个并收到一条错误消息。我会在上面发布错误消息
  • 是的,但它每分钟都在运行,而不是像我想要的那样每小时运行一次
  • @user1186050 你试过0 0 * * * *吗?
  • 不,我现在正在尝试,但我必须等到下一个小时才能看到它是否有效!

标签: azure cron azure-functions timer-trigger


【解决方案1】:

编辑:尝试使用"0 0 * * * *"doc 强调使用六个字段。

Azure Functions 使用 NCronTab 库来解释 CRON 表达式。一个 CRON 表达式包含 六个 字段:

{second} {minute} {hour} {day} {month} {day-of-week}


Azure 应该根据文档使用 NCrontab 库,但测试表明并非如此! 所以每小时使用"0 * * * *"

这是要验证的LINQPad 脚本:

var s = CrontabSchedule.Parse("0 * * * *");
var start = new DateTime(2000, 1, 1);
var end = start.AddYears(1);
var occurrences = s.GetNextOccurrences(start, end);
occurrences.Dump();

[这需要拉入 NCrontab nuget 包]

参考:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer

"Azure Functions 使用 NCronTab 库来解释 CRON 表达式”

【讨论】:

  • 我刚刚尝试了“0 * * * *”并收到了相同的格式错误。你错过了一个角色吗? "计划表达式 '0 * * * *' 未被识别为有效的 cron 表达式或时间跨度字符串"
  • 看起来它只想接受 6 位数字格式为有效。如果我使用你的格式,六位数会是什么? 0 0 * * * * ?
  • 如何在不等到下一个小时的情况下进行测试?
  • 请问您是如何获得 Dump 方法的?
  • @kevinob:它是 LINQPad 扩展方法的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2012-02-03
相关资源
最近更新 更多