cronjob의 시간대 변경

cronjob의 시간대 변경

매일 오전 9시(UTC 시간)에 실행되는 cronjob이 있습니다. 현재 GMT+1이므로 현지 시간으로 오전 10시에 실행됩니다. 시간대가 변경되면(일광 절약 시간, DST) cronjob은 여전히 ​​UTC 시간 오전 9시에 실행되지만 현지 시간 오전 11시에 실행됩니다. 하지만 일광 절약 시간제 여부에 관계없이 항상 10시에 실행되기를 원합니다. 어떻게 해야 하나요?

답변1

이는 운영 체제와 사용법에 따라 달라질 수 있습니다 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

답변3

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

답변4

매뉴얼 페이지에서:

/etc/timezone데몬은 시간대 정의가 있는 경우 이를 사용합니다.

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

관련 정보