#azure #cron #azure-functions #cron-task #crontrigger
Вопрос:
У меня есть требование запускать задание cron каждый день в 9 утра и 10.15 вечера. то есть триггер будет таким:
далее сегодня в 09:00:00
, затем сегодня в 22:00:00
, затем сегодня в 22:15:00
, затем на следующий день в 09:00:00 и так далее…
Я сделал это как * 0,15 9,22 * * *
, но это также сработает в 9.15 утра, чего я не хочу. Пожалуйста, помогите мне с созданием этого выражения.
Если это невозможно, может ли кто-нибудь, пожалуйста, подсказать, как написать несколько выражений cron в функции azure, запускаемой вовремя. Вот мой код:
[FunctionName("Function1")]
public void Run([TimerTrigger("* 0,15 9,22 * * *")] TimerInfo myTimer, ILogger log)
{
//my code here
}
Комментарии:
1. Примечание. перед фактической командой в записи crontab должно быть только пять полей .
Ответ №1:
Насколько я знаю, вы не можете создать такое CRON expression
в функции, я могу придумать, что вам нужно для создания двух функций. Выражение CRON функции: * 0 9,22 * *
, другое выражение CRON: * 15 22 * *
.
Ответ №2:
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);
}
}