가을 시간 변경 시간 동안 예정된 작업


12

다른 사람들이이 시나리오를 어떻게 다루는 지 궁금합니다.

오전 1시 30 분에 작업을 예약 한 경우 어떻게해야합니까? 가을에는 시간이 바뀌면 1:00:00에서 1:59:59의 시간이 반복되어 작업이 두 번 실행됩니다.

Windows 작업 스케줄러, SQL 에이전트 또는 기타 예약 도구 일 수 있습니다. 이러한 도구의 대부분은 UTC 시간이 아니라 기계 시간을 기반으로하는 것 같습니다. 매일 밤 UTC 시간에 작업을 실행하도록 지시하면 중복 시간 문제가 발생하지 않습니다.


1
최신 정보를 찾지 못했지만이 문제에 대한 정보를 얻을 수 있기를 바랍니다. support.microsoft.com/kb/325413
joeqwerty

훌륭합니다. 답변을 게시하지 않으시겠습니까?
NealWalters

글쎄, 그것은 실제로 당신에게 해결책을주지는 않지만 (적어도 그것을 읽을 수는 없다고 생각하지는 않지만) 문제를 이해하는 데 도움이 될 것이라고 생각했습니다. 나는 의견으로 기쁘다.
joeqwerty

답변:


10

시간대와 일광 절약 시간을 고려하여 현지 시간으로 향후 작업을 올바르게 예약하는 것은 매우 복잡한 주제입니다. 스택 오버플로에 대한 프로그래밍 관점에서 여기여기 에 대해 작성했습니다 .

비 프로그래밍 관점에서 요약하겠습니다.

  • UTC가 아닌 현지 시간으로 반복 패턴을 정의하십시오 . 예를 들어 매일 오전 8시에 알람이 울리도록 매일 알람 시계를 설정 한 경우 일광 절약 시간제 전환 후 한 시간 일찍 또는 한 시간 늦게 일어나지 않습니다. 미국 태평양 시간대에있는 경우 UTC로 오후 4 시로 예약 할 수 없습니다. 전환 후 현지 시간으로 오전 8시 (UTC)로 오후 ​​3시 (UTC)로 전환해야하기 때문입니다.

  • "현지"시간이 나타내는 시간대를 정의하십시오. 서버의 로컬 시간대가 최종 사용자에게 중요한 시간대라고 가정하지 마십시오.

  • 이벤트를 시작하려는 각 발생에 대해 현지 시간을 UTC 날짜 및 시간으로 투영 하십시오.

    • 거의 즉시 다음에 발생할 때이 작업을 수행하므로 UTC 시계를 사용하여 실제 실행 시간을 결정할 수 있습니다.

    • 에서 어떤 경우에, 당신은 또한 향후 5 명 발생, 또는 내년에 대한 모든 항목과 다음 몇 가지 (또는 많은) 인스턴스를 투사 할 수 있습니다. (이 부분은 응용 프로그램의 요구 사항에 따라 매우 다릅니다.)

  • 일광 절약 시간제 전환 시 발생하는 상황에 대해 수행 할 작업에 대한 전략 (고정 또는 구성 가능)을 준비하십시오 .

    • "스프링 포워드"전환의 경우 발생이 없을 수있는 현지 시간이 누락되는 간격이 있습니다. 예를 들어 미국 태평양 표준시에서는 현지 시간으로 오전 2시에 실행되도록 예약 된 일일 작업이 2014 년 3 월 9 일에 존재하지 않습니다. 대부분의 경우 절약 시간 (일반적으로 1 시간)만큼 해당 시간을 진행하려고합니다. ), 그 날 오전 3시에 실행되지만 다음 인스턴스에서는 오전 2시에 다시 실행됩니다. (그러나 다른 전략을 원할 수도 있습니다.)

    • "폴백"전환의 경우 발생이 두 번 존재할 수있는 중복 된 로컬 시간이 중복 됩니다 . 예를 들어 미국 태평양 표준시에서 오전 1시에 실행되도록 예약 된 일일 작업은 2014 년 11 월 2 일에 실행 가능한 시간이 두 번입니다. 대부분의 경우 첫 번째 발생시 1 을 실행하려고합니다. : 00 AM PDT이고 같은 날짜의 다음 오전 1시 PST를 건너 뜁니다. (그러나 다시, 두 번째 발생 또는 두 가지 모두에서 실행하는 것과 같은 다른 전략을 원할 수 있습니다 . YMMV)

  • 시간대 데이터를 업데이트해야하는 경우 UTC 시간을 모두 다시 계산할 준비를하십시오 . IANA / 올슨 TZDB의 여러 업데이트 끈다 매년 때문에 시간대 오프셋 및 일광 절약 시간 규칙에 대한 세계의 변화 그들의 마음의 모든 시간의 정부. 향후 특정 기간 동안 규칙이 변경되지 않는다고 가정 할 수 없습니다 .

    • 시간대 데이터 릴리스 발표구독 하고이를 시스템 및 / 또는 응용 프로그램에 적용하는 프로세스를 갖추십시오.

    • 전통적인 회사 환경에서는 이것이 IT 운영 직원의 책임이어야합니다.

    • 환경에 따라 tzdataLinux 패키지 업데이트, Java JRE 또는 tzupdater 또는 기타 여러 채널 을 통해이 데이터를 가져올 수 있습니다 . 때로는 환경에 따라 다르며 때로는 PHP 용 timezonedb PECL 패키지 와 같은 다른 프로그래밍 플랫폼마다 다릅니다 .

    • Microsoft는 자체 시간대 데이터를 가지고 있습니다. Windows의 경우 TimeZoneInfo.NET에서 사용 하는 경우 (예 :)이 데이터를 사용하고 있습니다. 업데이트는 여기 에서 제공되며 Windows Update를 통해 자동으로 푸시되므로 언제 다시 계산해야하는지 알 수 있도록 업데이트하십시오.

  • 이해가 모두 함께, 거기 이다 아직도 당신이 UTC으로 만 예약 할 시나리오, 그것은을위한 절대 미래의 이벤트. 예 :

    • X 시간마다 또는 X 분마다 실행되는 작업

    • 일출 시작 및 중지 시간 또는 기타 천문 현상.

    • 미리 정해진 시간에 민감한 정보를 다른 사람에게 전송할 때와 같이 시간에 민감한 보안 창.


Windows 작업 스케줄러

Windows가 반드시 옳은 일을하는 것은 아닙니다. 트리거 정의 방법에주의하십시오.

Windows 작업 스케줄러

"시간대에 동기화"라고 표시된 상자를 선택하면 작업이 UTC로만 예약됩니다. (모든 시간은 여전히 ​​현지 시간으로 표시되지만 UTC 로 저장 됩니다.) 이것은 이전에 "절대"이벤트라고 불렀습니다.

해당 상자를 선택하지 않으면 코드가 실행되는 컴퓨터의 현지 시간대가 사용됩니다. 시간대를 지정할 수있는 옵션을 제공하지 않으므로 IMHO 구현이 좋지 않습니다.

나는 그것이 DST 행동인지 정확히 확신하지 못하지만 실험하고 다시 그에게 돌아갈 것입니다. 아마도 위에서 설명한 것을 수행하지만 반드시 그런 것은 아닙니다.


SQL 에이전트

SQL 에이전트 스케줄러는 로컬 서버 시간 사용할 수 있다는 점에서 더 나쁩니다 . 또한 시간대를 지정할 수 없으며 UTC도 지정할 수 없습니다.

그것은 된 요청 하지만 허용되지 않습니다.


결론은 특정 도구 SQL Agent 및 Windows 작업 스케줄러를 사용하여 매번 변경할 때마다 수동으로 변경하는 것입니다. 또는 스케줄러에서 실행 된 코드는 UTC 시간을 다시 확인한 다음 지연 (가을)을 수행 할 수 있지만 수동 변경 이외의 작업이 Spring에서 실행되지 않도록 할 수는 없습니다. 아니면 실제로 일정을 다시 프로그래밍하는 스크립트일까요?
NealWalters

Windows 작업 스케줄러 및 SQL 에이전트에 대한 정보로 답변을 업데이트했습니다. 어느 것도 제대로하고 있지 않습니다. 자체 솔루션을 개발하려면 Quartz.net을 참조하십시오 .
Matt Johnson-Pint

단기적으로이 확인란을 선택한 상태에서 Windows 작업 스케줄러를 사용하여 특정 UTC 시간에 실행할 작업을 정의 할 수 있습니다. 그러나 자신의 코드에서 프로그래밍 방식으로 빌드하여 나머지를 고려할 수있는 일회성 작업이기를 원할 것입니다.
Matt Johnson-Pint

또 다른 위대한 답변!
NealWalters

1

일반적으로 신경 쓰지 않음.

"작업이 두 번 실행되면 어떻게해야합니까?"

일반적으로 문제가되지 않으므로 아무 것도 할 필요가 없습니다. 중요한 경우 가장 간단한 해결책은 일광 절약 시간제 변경의 영향을받는 시간에서 작업을 옮기는 것입니다.


신경 쓰지 않았다면 묻지 않았을 것입니다. 어떤 문제는 그렇지 않습니다. 2시에 파일을 추출하여 공급 업체에 보내는 작업이 있습니다. 2 시가 되풀이되지 않을 것입니다. 우리는 추가 보험을 위해 2:05로 옮길 것입니다. 우리는 백업, 스마트 인덱스 작업 등을 가지고 있지만 다행스럽게도 나중에 있습니다.
NealWalters

1
@NealWalters 나는 그 절점이 절망적이라고 공평하다고 생각 합니다. 작업이 두 번 실행되는지 중요 하지 않으면 왜 걱정 해야 합니까 ? 나는 당신에 대해 모른다. 그러나 나는 내가 걱정할 필요가없는 것에 대해 걱정하지 않고 걱정할 필요가있는 대신에 걱정할 것이 많다. 이 경우 않는 문제 당신은 이미 일부 정신 검사를 수행하도록 코딩해야 어쨌든 . 그러나 시계가 돌아가는 정확한 지점에서 실행되도록 예약하는 것을 피하는 것이 좋습니다. 바로 문제입니다.
Rob Moir

그것은 내가 선택한 것이 아니며 아침에 그 시간에 공항으로 추출 파일을 보내며, 그 시간은 그들이 파일을 원하는 시간입니다. 메시지 기반 시스템 인 BizTalk를 사용하고 있으므로 이와 같은 사항을 다시 확인하기가 더 어렵습니다. SQL 스케줄러와 Windows 작업 스케줄러가 매일 UTC 시간을 허용하지 않는 것은 약간 실망 스럽습니다.
NealWalters

1

언급했듯이 오전 1시에서 오전 2시 사이의 시간은 DST가 끝날 때 반복됩니다. 역 변경이 발생하면 (DST 시작) 오전 2시에서 오전 3시 사이에는 시간이 발생하지 않으며 작업이 실행되지 않습니다. 최선의 선택은

  • 작업 일정을 UTC로 실행
  • 전환 외부에서 한 번에 작업 실행 (12:59 AM 또는 3AM)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.