同一项工作有两个 cron 计划,但只有一个在触发
Two cron schedules on the same job, but only one is firing
我使用 Quartz 调度程序 (3.0.7) 为我们公司安排几个后台作业。我现在需要一个由两个单独的触发器触发的作业,但不知何故,该作业仅针对两个触发器之一执行。我最多使用配置文件中的两个 cron 表达式,它们具有以下值:
<!-- monthly, on the 1st day of the month, 10 minutes after midnight -->
<add key="CirculatingCouponsReportSchedule1" value="0 0/10 * ? * * *" />
<!-- weekly, on Mondays, 15 minutes after midnight -->
<add key="CirculatingCouponsReportSchedule2" value="0 1/3 * ? * * *" />
以下代码是我的应用程序代码的一个片段。它记录:...'s job is successfully scheduled for 2 cron schedules
,但实际上只执行每 10 分钟触发一次的计划。
var crons = new List<string>();
if (CronExpression.IsValidExpression(ConfigurationManager.AppSettings["Schedule1"]))
{
crons.Add(ConfigurationManager.AppSettings["Schedule1"]);
}
if (CronExpression.IsValidExpression(ConfigurationManager.AppSettings["Schedule2"]))
{
crons.Add(ConfigurationManager.AppSettings["Schedule2"]);
}
if (crons.Any())
{
var job = new JobDetailImpl("MyJob", typeof(MyReportJob));
var i = 0;
crons.ForEach(c =>
{
i++;
var trigger = TriggerBuilder.Create()
.WithIdentity($"MyReportTrigger{i}", "ReportJobs")
.WithCronSchedule(c)
.Build();
scheduler.ScheduleJob(job, trigger);
});
Logger.Log($"{nameof(SendMyReportTask)}'s job is successfully scheduled for {crons.Count} cron schedules.", System.Diagnostics.EventLogEntryType.Information);
}
else
{
Logger.Log($"{nameof(SendMyReportTask)}'s job not scheduled. No valid cron expression found.", System.Diagnostics.EventLogEntryType.Information);
}
有人知道问题出在哪里吗?我尝试的第一件事是通过添加计数器使身份独一无二,但这没有帮助。
根据要求:据我所知,作业不能默认并行启动。
应该有一个配置来启用它,但是作业必须遵守一些规则 (afaik)。
另一种可能性是为每个触发器注册一个单独的作业实例。
我使用 Quartz 调度程序 (3.0.7) 为我们公司安排几个后台作业。我现在需要一个由两个单独的触发器触发的作业,但不知何故,该作业仅针对两个触发器之一执行。我最多使用配置文件中的两个 cron 表达式,它们具有以下值:
<!-- monthly, on the 1st day of the month, 10 minutes after midnight -->
<add key="CirculatingCouponsReportSchedule1" value="0 0/10 * ? * * *" />
<!-- weekly, on Mondays, 15 minutes after midnight -->
<add key="CirculatingCouponsReportSchedule2" value="0 1/3 * ? * * *" />
以下代码是我的应用程序代码的一个片段。它记录:...'s job is successfully scheduled for 2 cron schedules
,但实际上只执行每 10 分钟触发一次的计划。
var crons = new List<string>();
if (CronExpression.IsValidExpression(ConfigurationManager.AppSettings["Schedule1"]))
{
crons.Add(ConfigurationManager.AppSettings["Schedule1"]);
}
if (CronExpression.IsValidExpression(ConfigurationManager.AppSettings["Schedule2"]))
{
crons.Add(ConfigurationManager.AppSettings["Schedule2"]);
}
if (crons.Any())
{
var job = new JobDetailImpl("MyJob", typeof(MyReportJob));
var i = 0;
crons.ForEach(c =>
{
i++;
var trigger = TriggerBuilder.Create()
.WithIdentity($"MyReportTrigger{i}", "ReportJobs")
.WithCronSchedule(c)
.Build();
scheduler.ScheduleJob(job, trigger);
});
Logger.Log($"{nameof(SendMyReportTask)}'s job is successfully scheduled for {crons.Count} cron schedules.", System.Diagnostics.EventLogEntryType.Information);
}
else
{
Logger.Log($"{nameof(SendMyReportTask)}'s job not scheduled. No valid cron expression found.", System.Diagnostics.EventLogEntryType.Information);
}
有人知道问题出在哪里吗?我尝试的第一件事是通过添加计数器使身份独一无二,但这没有帮助。
根据要求:据我所知,作业不能默认并行启动。
应该有一个配置来启用它,但是作业必须遵守一些规则 (afaik)。
另一种可能性是为每个触发器注册一个单独的作业实例。