cronjob의 시간대 변경


10

매일 UTC-Time 오전 9시에 실행되는 cronjob이 있습니다. GMT + 1에 있으므로 현지 시간으로 오전 10시에 실행됩니다. 시간대 변경 (일광 절약 시간제 DST로)이있는 경우 cronjob은 UTC 시간 오전 9시에서 현지 시간 오전 11 시까 지 여전히 실행됩니다. 그러나 나는 여름 시간에 관계없이 항상 10:00에 실행하기를 원합니다. 어떻게해야합니까?


4
이 질문은 StackOverflow에 게시됩니다 : stackoverflow.com/questions/29592533/…
John1024

/ etc / timezone에서 시간대는 무엇으로 설정되어 있습니까?
Twinkles

답변:


2

/ etc / timezone에서 설정을 확인하십시오. 귀하가 언급 한 질문에서 "GMT + 1"에 해당 시간대가 설정된 경우 스크립트는 항상 UTC + 1 시간으로 실행됩니다. 예를 들어 "유럽 / 파리"로 설정하면 일광 절약 시간에 따라 실행 시간이 변경됩니다.


6

이것은 OS에 따라 다르며의 구현입니다 cron. 가장 널리 사용되는 cron 구현에서는 불가능합니다 vixie/isc cron. 에서 crontab(5) manpage:

LIMITATIONS
       The  cron  daemon  runs with a defined timezone. It currently does not 
       support per-user timezones. All the tasks: system's and user's will 
       be run based on the configured timezone. Even if a user specifies  
       the TZ  environment  variable  in  his crontab this will affect only 
       the commands executed in the crontab, not the execution of the crontab 
       tasks themselves.

2

@ Cyrus에서 확장하면 이것이 내가 한 일입니다.

UTC 오프셋을 확인하는 스크립트를 만들었습니다.

#!/bin/bash
export TZ=":US/Eastern"
if [ "$(date +%z)" == "$1" ]; then
  shift
  exec $@
fi

그런 다음 원하는 오프셋에 대해 두 개의 crontab 항목을 각각 추가합니다.

0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here

1

매뉴얼 페이지에서 :

데몬은 존재 /etc/timezone하는 경우 시간대 의 정의를 사용합니다.

사용자의 crontab 정의에서 환경을 다시 정의 할 수 있지만 cron은 단일 시간대의 작업 만 처리합니다.


1

cronjob을 8:00로 옮기고 GMT + 1에있는 경우 1 시간 동안 자십시오.

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here

TZ가 북미 인 경우 어떻게합니까?
swdev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.