运行 某个特定时间的 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.jsonApplication 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