我想知道是否有可能编写一个有几个条件的cron表达式:
作业应以给定的间隔(分钟)运行 . 例如,间隔为42分钟,开火时间为 10:00 , 10:42 , 11:24 , 12:06 等 .
10:00
10:42
11:24
12:06
如果当前分钟未以 0 结尾(例如 10:28 , 10:29 ),则cron首次触发时间应为 10:30 . 所以这意味着第一次开火时间应该是"round"分钟 .
0
10:28
10:29
10:30
我希望你了解这些条件 . 是否可以用石英cron描述它们?
您可以使用Quartz.net 3.0中描述的作业触发器:
var jobTrigger = TriggerBuilder.Create() .StartNow() .WithSimpleSchedule(s => s .WithIntervalInMinutes(42) .RepeatForever()) .Build();
并且您可以在第一轮时间重新启动应用程序,因此它将仅在同一时间第一次启动 .
我通常使用http://www.cronmaker.com/来生成我的cron表达式 . 如果您尝试每42分钟选项,您将获得以下表达式:" 0 0/42 * 1/1 * ? *" . 至于"round"分钟的事情,你可以在构建你的触发器时尝试这个:
ITrigger trigger = TriggerBuilder.Create() .WithIdentity(JobTrigger, JobGroup) .WithCronSchedule(CroneExpression) .StartAt(new DateTimeOffset(DateTime.Now, TimeSpan.FromMinutes(DateTime.Now.Minute % 10))) .Build();
这是不可能的,请参阅解释和类似问题:Quartz.net - Repeat on day n, of every m months?
Cron表达式也不可能 . 为此,您需要应用一些复杂的逻辑,使用评估器中不存在的某些运算符 . 你为什么需要这个?您想结合这两个要求并创建单一的复杂模式吗?
3 回答
您可以使用Quartz.net 3.0中描述的作业触发器:
并且您可以在第一轮时间重新启动应用程序,因此它将仅在同一时间第一次启动 .
我通常使用http://www.cronmaker.com/来生成我的cron表达式 . 如果您尝试每42分钟选项,您将获得以下表达式:" 0 0/42 * 1/1 * ? *" . 至于"round"分钟的事情,你可以在构建你的触发器时尝试这个:
这是不可能的,请参阅解释和类似问题:Quartz.net - Repeat on day n, of every m months?
Cron表达式也不可能 . 为此,您需要应用一些复杂的逻辑,使用评估器中不存在的某些运算符 . 你为什么需要这个?您想结合这两个要求并创建单一的复杂模式吗?