2013-08-21 2 views
2

일시 중지 된 상태의 스케줄러에 트리거를 추가 할 수 있습니까? 시작 시간을 지정하지 않으면 즉시 시작된다는 것을 알았습니다.일시 중지 된 트리거 만들기

scheduler.PauseJob을 즉시 호출하는 것 외에 다른 방법으로 수행 할 수 있습니까?

var trigger = TriggerBuilder.Create() 
    .ForJob(job) 
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever()) 
    .Build(); 

scheduler.ScheduleJob(job, trigger); 

// Pause job immediately 
scheduler.PauseJob(job.Key); 

답변

1

나는 리포지토리를 점검했으나 불가능하다고 생각합니다.
트리거/작업이 예약 될 때까지 일시 중지 할 수 없습니다.

Scheduler.PauseTriggerScheduler.PauseJob

난 당신이 조금을 시작하고 즉시 일시 정지 지연 트리거 일정을 제안 InternalTriggerState.Paused ( see reference)

에 트리거의 상태를 설정합니다.

var trigger = TriggerBuilder.Create() 
    .ForJob(job) 
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever()) 
    .StartAt(SystemTime.UtcNow().AddSeconds(5)) 
    .Build(); 

scheduler.ScheduleJob(job, trigger); 

scheduler.PauseTrigger(trigger.Key); 
+1

실제로 수를 트리거 그룹과 - 내 대답을 확인하십시오

// pauses the group, if it isn't already scheduler.PauseTriggers(GroupMatcher<TriggerKey>.GroupEquals("PausedGroup")); var job = JobBuilder.Create<MyJob>().WithIdentity(jobName).Build(); var trigger = TriggerBuilder.Create() .ForJob(job) .WithIdentity(Guid.NewGuid().ToString(), "PausedGroup") .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever()) .Build(); scheduler.ScheduleJob(job, trigger); 

그런 다음 다른 그룹과 각 트리거 일정을 변경, 작업을 다시 시작합니다. – nollidge

+0

@nollidge : 설명해 주셔서 감사합니다. 이 대답은 4 살입니다. – LeftyX

1

하나의 가능한 솔루션은 트리거 작성기의 StartAt() 메소드를 사용하여 특정 시작 시간을 설정하는 것입니다.

예컨대 30 분 동안 시작 지연 :

var trigger = TriggerBuilder.Create() 
    .ForJob(job) 
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever()) 
    .StartAt(DateTime.UtcNow.AddMinutes(30)) 
    .Build(); 
1

실제로 트리거 그룹으로이를 수행 할 수 있습니다. 특정 트리거 그룹을 일시 중지 한 다음 트리거가 해당 그룹에 속한 작업을 생성하면됩니다.

foreach (var oldTrigger in scheduler.GetTriggers(new JobKey(jobName))) 
{ 
    // clone the old trigger with new group name 
    var newTrigger = oldTrigger.GetTriggerBuilder() 
     .WithIdentity(oldTrigger.Key.Name) // uses default trigger group name 
     .Build(); 

    // not a typo, the method to reschedule a trigger is called "RescheduleJob" for some reason 
    scheduler.RescheduleJob(oldTrigger.Key, newTrigger); 
} 
관련 문제