2016-10-13 4 views
0

Quartz 작업을 예약하는 .net Windows 서비스가 있습니다. 매일 오전 4시에 작업을 시작하고 12 시간마다 반복하려면 다음 코드를 작성했습니다. 아래의 시작 시간은 각 직업마다 다릅니다. 여기서 문제는 내가 말할 때 오전 4시에 시작하는 것이 아니라 매일 오전 12시와 12시에 실행하는 것입니다. StartAtTime에 요청했을 때 정확히 시작되는지 어떻게 확인할 수 있습니까? cron 표현의 값을 1/2로 줄이고 시작 시간을 오후 2시 또는 오후 3 시로 변경하면 예상대로 작동합니다.Cron 표현식이 올바르게 작동하지 않습니다.

var startAtTime = DateTime.Today.AddHours(localTime[Key]); 

if (startAtTime.ToUniversalTime() < DateTime.UtcNow) 
{ 
    startAtTime = startAtTime.AddDays(1); 
} 

ITrigger objESLJobTrigger = TriggerBuilder.Create() 
          .WithIdentity("ESLTrigger-",    AuditType.ESL.ToString()) 
          .StartAt(new DateTimeOffset(startAtTime)) 
          .WithCronSchedule("0 0 0/12 ? * SUN-SAT", x => x.WithMisfireHandlingInstructionIgnoreMisfires()) 
          .Build(); 

답변

1

정상적으로 작동합니다.

  • .StartAt() 메서드는 작업이 아닌 트리거를 시작할 때 정의합니다.
  • 귀하의 cron 표현식 0 0 0/12 ? * SUN-SAT은 정확하게 "12시와 12시에 작업을 실행합니다."(확인하려면 cronmaker을 사용할 수 있음)을 의미합니다. 이 different way에 간격 작동으로

크론 스케줄러는 당신이 기대하는 그, 귀하의 경우 도움이되지 않습니다 :

/- 단위를 지정하는 데 사용됩니다. 예를 들어 초 필드의 "0/15"는 "0, 15, 30 및 45 초"를 의미합니다. 초 필드의 "5/15"는 "5, 20, 35, 50 초"를 의미합니다. 문자 '-이 경우' '가'/ '앞에'0 '이 오는 것과 동일하면'/ '를 지정할 수도 있습니다. day-of-month 필드의 '1/3'은 '해당 달의 첫날부터 3 일마다 화재'를 의미합니다.

따라서 0 0 4/12 ? * SUN-SAT과 같은 표현은 오전 12시 및 오후 4시에 12 시간마다 실행됩니다. 그리고 0 0 5/12 ? * SUN-SAT은 오전 5시와 오후 5시에 12 시간마다 실행됩니다. StartAt() 메소드는 첫 번째 작업이 (4AM 또는 4PM에서) 트리거 될 때만 정의하며, cron 표현에 대해 오프셋을 수행하지 않습니다.

그냥 대신 SimpleSchedule를 사용

ITrigger objESLJobTrigger = TriggerBuilder.Create() 
          .WithIdentity("ESLTrigger-", AuditType.ESL.ToString()) 
          .StartAt(new DateTimeOffset(startAtTime)) 
          .WithSimpleSchedule(x => x 
           .WithIntervalInHours(12) 
           .RepeatForever()) 
          .Build(); 
+0

나는 그것이 일정의 크론보다 유연 같은 느낌 때문에 간단한 트리거를 사용하지 않습니다. 시작 트리거와 시작 작업의 차이점은 무엇입니까, 트리거는 작업을 올바르게 실행합니다. 13 시간 HRS에서 startAt를 말하고 2 시간마다 반복해서 말하면 내 질문에서 말한 것처럼 정확히 13 시간 후에 시작하여 2 시간마다 반복합니다. –

+0

@AjaySrikanth 님이 답변을 업데이트했습니다. 현재 (시작) 시간을 기준으로 cron 표현식을 동적으로 생성 할 수 있습니다. – Set

+0

답장을 보내 주셔서 감사합니다.하지만 30 분마다 또는 특정 시간에 시작하는 2 시간 30 분마다 4 시간 (이 시간은 가변적 임)부터 시작할 수 있습니다. 간단한 방아쇠로. 내가 틀렸다고 정정하면 –