如何为多个时间段设置cron表达式



我需要在每天上午9点和晚上10点15分触发cron作业。即触发器将为:

下一天09:00:00
然后今天22:00:00
然后今天22:15:00
,然后第二天09:00:00,依此类推…

我已经作为* 0,15 9,22 * * *完成了它,但它也将在上午9点15分触发,这是我不希望的。请帮我创建这个表达式。

如果这不可能,请任何人建议如何在时间触发的azure函数中编写多个cron表达式。这是我的代码:

[FunctionName("Function1")]
public void Run([TimerTrigger("* 0,15 9,22 * * *")] TimerInfo myTimer, ILogger log)
{
//my code here
}

据我所知,你不能在一个函数中创建这样的CRON expression,我可以想到你需要创建两个函数。一个函数CRON表达式:* 0 9,22 * *,另一个CRON表达式为* 15 22 * *

AFAIK您不能创建每个触发器之间具有不同距离的cron表达式。

您可以通过多种编程方式解决问题:


  • 创建一个表示最大公分母的单个cron表达式。例如。
    • 在您的示例中,需要15分钟
    • 因此表达式为0 0/15 0 ? * * *
  • 使函数足够智能,可以决定是跳过触发器还是为触发器服务。例如,一种愚蠢的方法是:
public class CronFunction {
private void processEvent(String event) {
// process...
}
@FunctionName("cron")
public void cronFunc(
@TimerTrigger(schedule = "0 0 0/1 ? * SAT,SUN *") String event, ExecutionContext context) {
curr_day = ...;
curr_time = ...;
if ((curr_day == today and curr_time in ['09:00:00', '22:00:00', '22:15:00']) ||
(curr_day == tomorrow and curr_time in ['09:00:00'])) {
processEvent(event);
} else {
logger.debug("skipping trigger");
}
}
}

创建多个触发器,所有触发器都调用相同的实现。

public class CronFunctions {
private void processEvent(String event) {
// process...
}
@FunctionName("cron1")
public void cronFunc1(
@TimerTrigger(schedule = "0 0 0/1 ? * SAT,SUN *") String event, ExecutionContext context) {
processEvent(event);
}
@FunctionName("cron2")
public void cronFunc2(
@TimerTrigger(schedule = "0 0/15 0 ? * MON,TUE,WED,THU,FRI *") String event,
ExecutionContext context) {
processEvent(event);
}
}

最新更新