cronjob의 시간대 변경 9시에 실행되는 cronjob이 있습니다. GMT +

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



답변

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


답변

이것은 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.

답변

@ 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

답변

매뉴얼 페이지에서 :

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

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


답변

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

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