시간대가 AEST(호주 동부 표준시)라고 가정하면 시간은 처음에는 오전 2시에서 오전 3시로 점프하고 끝에서는 오전 3시에서 오전 2시로 반전됩니다.
일광 절약 시간은 10월 첫 번째 일요일 오전 2시에 시작되어 시계를 한 시간 앞으로 이동합니다. 4월 첫째 일요일은 오전 2시(오전 3시 일광 절약 시간제)에 끝나고 시계가 한 시간 앞으로 이동합니다.
DST(겨울에서 여름) 시간이 변경되면 시간이 오전 2시에서 오전 3시로 이동합니다. 작업 실행이 이 시간 범위 내에 속하도록 예약된 경우 작업은 실행되지 않습니다.
01:57:00
01:58:00
01:59:00
03:00:00 <--- job will not run as between 02:00 and 03:00 will disappear
03:01:00
03:02:00
시간이 DST(여름에서 겨울)로 변경되면 오전 3시에서 오전 2시로 시간이 반전됩니다. 이 시간 범위 내에 실행이 예약되면 실행이 두 번 실행됩니다.
01:59:00
02:00:00
...
02:57:00
02:58:00
02:59:00
02:00:00 <--- job will be run twice as between 02:00 and 03:00 will repeat
02:01:00
02:02:00
에서와 같이여름 시간, 이것이 예상되는 것 같습니다. 그렇다면 여전히 DST 기반 시간을 사용해야 하는 동시에 작업이 실행되지 않거나 두 번 실행되는 것을 방지할 수 있는 가능한 솔루션은 무엇입니까?일광 절약 시간제 비활성화고정된 GMT+N이나 GMT-N을 사용하는 것을 권장하지만, DST 기반의 시간을 사용해야 하기 때문에 사용할 수 없습니다.
Cron 또는 타임스탬프 기반 프로그래밍을 사용하지 않고 Epoch 또는 UTC를 사용하는 스케줄러가 필요합니까?
답변1
한 가지 옵션은 DST 조정이 이루어지지 않도록 UTC+10 오프셋 시간대에서 cron을 실행하는 것입니다. 이 질문을 봤어요이를 수행하는 방법에 대한 예입니다.
또 다른 옵션은 DST 시작일에 작업이 두 번 실행되도록 구성하는 것입니다.
0 2 * * * /path/to/job
0 3 1-7 oct sun /path/to/job
따라서 일광 절약 시간제가 시작되면 놓치지 않을 것입니다.
그런 다음 스크립트에서 오늘의 작업이 아직 실행되지 않았는지 확인해야 합니다. 한 가지 방법은 날짜의 시간과 시간대를 확인하는 것입니다. DST가 끝나면 "date +"%a %m %H %Z""가 다음과 같이 보고될 것이라고 가정합니다.
02:59:00: Sun 10 02 ACDT
02:00:00: Sun 10 02 ACT
따라서 스크립트는 다음을 확인할 수 있습니다.
now=`date +"%a %m %H %Z"`
if [ "$now" -eq "Sun 10 02 ACT" ]; then
echo "DST ended - not running"
exit 0;
fi;