Azure 函数 TimerTrigger 仅 运行 一次
Azure function TimerTrigger only running once
这是我的Function.Json
{ "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.28", "configurationSource": "attributes", "bindings": [
{
"type": "timerTrigger",
"schedule": "*/5 * * * * *",
"useMonitor": true,
"runOnStartup": false,
"name": "myTimer"
} ], "disabled": false, "scriptFile": "../bin/PullRequest.dll", "entryPoint": "PullRequest.PullRequest.Run" }
这是我的实际功能:
[FunctionName("PullRequest")]
public static void Run([TimerTrigger("*/5 * * * * *")]TimerInfo myTimer, ILogger log)
{
if (myTimer.IsPastDue)
{
log.LogInformation("Timer is running late!");
}
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
当我在 Azure 门户上尝试 运行 这个功能时,它只 运行 一次就停止了。
这是 Azure Funciton 的日志:
我重新运行它,现在它只运行一次。:
喜欢:您向我们展示的日志显示函数PullRequest
运行至少3次。
- 一旦
executing
日志行不可见,原因不明
- 曾经因为计时器触发 (@11:30:00)
- 一次是因为它通过主机 API 以编程方式调用(也称为手动)
您的 CRON 表达式 */5 * * * * *
大致 运行 变成 'run this every time the number of seconds is divisible by 5'。这与您提供的日志不匹配。您确定您使用的是 CRON 表达式吗?
Azure Functions uses the NCronTab library to interpret CRON expressions. A CRON expression includes six fields:
{second} {minute} {hour} {day} {month} {day-of-week}
摘自 Timer trigger for Azure Functions - CRON expressions.
编辑:
定时器触发器上的函数 运行ning 会在指定的定时器间隔内自动触发。要让函数真正 运行,你(当然)需要有一些东西 运行ning 来执行那个触发器。否则:如何触发它们?
在 Azure 中,函数运行时负责在正确的时间触发函数。在本地,当您调试应用程序时自动启动的 func.exe
工具会为您执行此操作。但如果不这样做,运行,什么都不会发生。
Azure Functions Core Tools lets you develop and test your functions on your local computer from the command prompt or terminal. Your local functions can connect to live Azure services, and you can debug your functions on your local computer using the full Functions runtime.
和
To run a Functions project, run the Functions host. The host enables triggers for all functions in the project.
摘自 Work with Azure Functions Core Tools.
简而言之:“主机启用触发器。它需要运行具有可以触发任何功能的东西”。
时间触发器将根据 CORN 表达式自动执行,即在您的情况下,此函数将每五秒执行一次,如果您从 Azure 门户 运行 它只会 运行 一次。
如果您想检查上次执行的时间,您可以转到 Monitor 选项卡并检查时间。
我已经在本地执行了这个并且它按预期工作
这是我的Function.Json
{ "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.28", "configurationSource": "attributes", "bindings": [
{
"type": "timerTrigger",
"schedule": "*/5 * * * * *",
"useMonitor": true,
"runOnStartup": false,
"name": "myTimer"
} ], "disabled": false, "scriptFile": "../bin/PullRequest.dll", "entryPoint": "PullRequest.PullRequest.Run" }
这是我的实际功能:
[FunctionName("PullRequest")]
public static void Run([TimerTrigger("*/5 * * * * *")]TimerInfo myTimer, ILogger log)
{
if (myTimer.IsPastDue)
{
log.LogInformation("Timer is running late!");
}
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
当我在 Azure 门户上尝试 运行 这个功能时,它只 运行 一次就停止了。
这是 Azure Funciton 的日志:
我重新运行它,现在它只运行一次。:
喜欢PullRequest
运行至少3次。
- 一旦
executing
日志行不可见,原因不明 - 曾经因为计时器触发 (@11:30:00)
- 一次是因为它通过主机 API 以编程方式调用(也称为手动)
您的 CRON 表达式 */5 * * * * *
大致 运行 变成 'run this every time the number of seconds is divisible by 5'。这与您提供的日志不匹配。您确定您使用的是 CRON 表达式吗?
Azure Functions uses the NCronTab library to interpret CRON expressions. A CRON expression includes six fields:
{second} {minute} {hour} {day} {month} {day-of-week}
摘自 Timer trigger for Azure Functions - CRON expressions.
编辑:
定时器触发器上的函数 运行ning 会在指定的定时器间隔内自动触发。要让函数真正 运行,你(当然)需要有一些东西 运行ning 来执行那个触发器。否则:如何触发它们?
在 Azure 中,函数运行时负责在正确的时间触发函数。在本地,当您调试应用程序时自动启动的 func.exe
工具会为您执行此操作。但如果不这样做,运行,什么都不会发生。
Azure Functions Core Tools lets you develop and test your functions on your local computer from the command prompt or terminal. Your local functions can connect to live Azure services, and you can debug your functions on your local computer using the full Functions runtime.
和
To run a Functions project, run the Functions host. The host enables triggers for all functions in the project.
摘自 Work with Azure Functions Core Tools.
简而言之:“主机启用触发器。它需要运行具有可以触发任何功能的东西”。
时间触发器将根据 CORN 表达式自动执行,即在您的情况下,此函数将每五秒执行一次,如果您从 Azure 门户 运行 它只会 运行 一次。
如果您想检查上次执行的时间,您可以转到 Monitor 选项卡并检查时间。
我已经在本地执行了这个并且它按预期工作