매일 오전 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은 단일 시간대에 대한 작업만 처리할 수 있습니다.