运行 某个特定时间的 azure 函数只执行一次?
Running an azure function on a specific time for only once?
所以我正在努力发送移动应用推送通知,我已经设置了 Azure 通知中心,但我想在其中进行调度,我知道在 Azure 中有一个选项可以做到这一点,因为它花费 200 美元,我决定创建 Azure Functions 来处理它,
我已经了解了 NCRON 表达式,现在我想知道如何在特定日期将工作安排到 运行 一次,我能找到的只是基于重复的,而且是否有可能运行 动态的工作日期会有所不同
public static class Function1
{
[FunctionName("Function1")]
public static void Run([TimerTrigger("0 0 15 2 Jan")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
我正在尝试做这样的事情,运行1 月 2 日在 15:00Hrs 做了一些事情,它似乎没有用,我是不是遗漏了什么,我该如何做TimerTrigger
动态?
为了描述清楚,我重新编辑了整个答案。希望这次能解释清楚。
好的。首先,您需要知道,azure Function 有一个声明部分和一个配置部分。
在本地,声明部分是([TimerTrigger("* * * * * *")]TimerInfo myTimer, ILogger log)
,配置部分是local.settings.json
文件。
部署到 Azure 时。它改变。声明部分变为function.json
,Application Settings
变为配置部分。
根据您的要求,您可以在配置部分添加一个键并在您的函数中获取它。
例如,
在本地:
function.cs:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace TimeTrigger
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([TimerTrigger("%Schedule%")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
}
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"Schedule": "* * * * * *"
}
}
您可以通过更改json中的key的值来改变timetrigger的触发方式。(例如,使用powershell修改值。或者您可以使用代码修改。)
门户网站:
与本地类似,您可以在门户网站上执行此操作:
声明部分:
配置部分:
您可以使用以下 link:
生成详细的 CRON 表达式
http://corntab.com/?c=0_15_2_1_*
0 0 15 2 Jan *
是生成的 CRON 表达式,它将 运行 在任何年份的每 2 天 1500 时它。
正如@Bowman 的正确建议,请检查并验证上面的表达式 link 看看是否有帮助。
首先假设你现在的主要问题是你的表达式,正确的表达式格式你可以参考文档:NCRONTAB expressions.
{second} {minute} {hour} {day} {month} {day-of-week}
然后关于您对 运行 动态工作的要求。您可以将计划表达式放在应用程序设置中,并将此 属性 设置为用 % 符号包裹的应用程序设置名称,如本例所示:%ScheduleAppSetting%
。您可以在 configuration.
中查看
即使使用此表达式,它也会显示错误,但它仍然有效。
如果只需要 运行 一次,为什么要使用定时器功能?
我认为更好的解决方案是使用属性 ScheduledEnqueueTimeUtc 向队列发送消息,以便 运行 在预定的时间发送消息。
https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sequencing#scheduled-messages
所以我正在努力发送移动应用推送通知,我已经设置了 Azure 通知中心,但我想在其中进行调度,我知道在 Azure 中有一个选项可以做到这一点,因为它花费 200 美元,我决定创建 Azure Functions 来处理它,
我已经了解了 NCRON 表达式,现在我想知道如何在特定日期将工作安排到 运行 一次,我能找到的只是基于重复的,而且是否有可能运行 动态的工作日期会有所不同
public static class Function1
{
[FunctionName("Function1")]
public static void Run([TimerTrigger("0 0 15 2 Jan")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
我正在尝试做这样的事情,运行1 月 2 日在 15:00Hrs 做了一些事情,它似乎没有用,我是不是遗漏了什么,我该如何做TimerTrigger
动态?
为了描述清楚,我重新编辑了整个答案。希望这次能解释清楚。
好的。首先,您需要知道,azure Function 有一个声明部分和一个配置部分。
在本地,声明部分是([TimerTrigger("* * * * * *")]TimerInfo myTimer, ILogger log)
,配置部分是local.settings.json
文件。
部署到 Azure 时。它改变。声明部分变为function.json
,Application Settings
变为配置部分。
根据您的要求,您可以在配置部分添加一个键并在您的函数中获取它。
例如,
在本地:
function.cs:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace TimeTrigger
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([TimerTrigger("%Schedule%")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
}
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"Schedule": "* * * * * *"
}
}
您可以通过更改json中的key的值来改变timetrigger的触发方式。(例如,使用powershell修改值。或者您可以使用代码修改。)
门户网站:
与本地类似,您可以在门户网站上执行此操作:
声明部分:
配置部分:
您可以使用以下 link:
生成详细的 CRON 表达式http://corntab.com/?c=0_15_2_1_*
0 0 15 2 Jan *
是生成的 CRON 表达式,它将 运行 在任何年份的每 2 天 1500 时它。
正如@Bowman 的正确建议,请检查并验证上面的表达式 link 看看是否有帮助。
首先假设你现在的主要问题是你的表达式,正确的表达式格式你可以参考文档:NCRONTAB expressions.
{second} {minute} {hour} {day} {month} {day-of-week}
然后关于您对 运行 动态工作的要求。您可以将计划表达式放在应用程序设置中,并将此 属性 设置为用 % 符号包裹的应用程序设置名称,如本例所示:%ScheduleAppSetting%
。您可以在 configuration.
即使使用此表达式,它也会显示错误,但它仍然有效。
如果只需要 运行 一次,为什么要使用定时器功能?
我认为更好的解决方案是使用属性 ScheduledEnqueueTimeUtc 向队列发送消息,以便 运行 在预定的时间发送消息。
https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sequencing#scheduled-messages