如何设置多个时间段的cron表达式
How to set cron expression for multiple time periods
我有一个要求在每天上午 9 点和晚上 10 点 15 分触发 cron 作业。
即触发器将是:
next today at 09:00:00
then today at 22:00:00
then today at 22:15:00
then next day at 09:00:00 and so on...
我已经按照 * 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 * *
.
据我所知,您无法创建每个触发器之间具有不同距离的 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);
}
}
我有一个要求在每天上午 9 点和晚上 10 点 15 分触发 cron 作业。 即触发器将是:
next today at 09:00:00
then today at 22:00:00
then today at 22:15:00
then next day at 09:00:00 and so on...
我已经按照 * 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 * *
.
据我所知,您无法创建每个触发器之间具有不同距离的 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);
}
}