매일 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