我需要在每天上午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);
}
}