我有以下代码来安排使用Quartz重新启动作业。代码为一周中的每一天设置触发器(由用户选择)。所以工作应该每天最多运行一次。但是,当我测试它时,它连续运行三次而不是一次。有什么想法吗?
private void ScheduleJob(Server server)
{
bool jobScheduled = false;
JobDetail job = new JobDetail(server.ServerName, JOB_GROUP, typeof(RebootJob));
job.JobDataMap.Add("Server", server);
// Create a trigger for each day of the week on which this schedule falls
for(int i=0; i < 7; i++)
{
DayOfWeek dayOfWeek = (DayOfWeek)i;
DateTime? jobStartTime = server.GetNextScheduledRebootDateAndTime();
if(server.isScheduledOnDayOfWeek(dayOfWeek) && jobStartTime.HasValue)
{
SimpleTrigger trigger = new SimpleTrigger(
String.Format("{0}.{1}", server.ServerName, dayOfWeek.ToString()),
JOB_GROUP,
jobStartTime.Value.ToUniversalTime(),
null,
SimpleTrigger.RepeatIndefinitely,
TimeSpan.FromDays(7 * (double)server.RebootFrequency)
);
if(!jobScheduled)
{
ManagementService.Instance.Scheduler.ScheduleJob(job, trigger);
jobScheduled = true;
// Add server to list of servers with a reboot schedule
m_RebootableServers.Add(server.ServerName, server);
}
else // A job has already been schedule, just append triggers to it
{
trigger.JobName = job.Name;
trigger.JobGroup = job.Group;
ManagementService.Instance.Scheduler.ScheduleJob(trigger);
}
}
}
}
答案 0 :(得分:1)
看起来您正在设置每个触发器同时触发并具有相同的间隔。
你的“for”循环遍历“i”并不能解释“server.GetNextScheduledRebootDateAndTime()”总是返回相同的“下一次”重启时间这一事实。我猜你正在测试一台配置为在一周内3天重启的服务器,所有的触发器都设置为同时以7天的重复间隔开始。
如果您已设置使用SimpleTrigger,则需要将触发器的开始时间与要安排重新启动的星期几相对。