Изменить часовой пояс cronjob

10

У меня есть cronjob, который выполняется каждый день в 9:00 UTC-Time. Я в GMT + 1, поэтому он выполняется в 10:00 по местному времени. Когда происходит изменение часового пояса (на летнее время, летнее время), cronjob выполняется все еще в 9:00 утра по UTC-времени, но в 11:00 утра по местному времени. Но я хочу, чтобы это всегда выполнялось в 10:00, независимо от того, летнее время или нет. Как я могу это сделать?

qailburn
источник
4
Этот вопрос перекрестно опубликован в StackOverflow: stackoverflow.com/questions/29592533/…
John1024
Какой часовой пояс установлен в / etc / timezone?
Мерцает

Ответы:

2

Проверьте ваши настройки в / etc / timezone. В вопросе, который вы упомянули, вы находитесь в «GMT + 1», если для этого часового пояса установлено значение, ваш сценарий всегда будет выполняться в UTC плюс один час. Если вы установите, например, «Европа / Париж», время выполнения изменится с переходом на летнее время.

Twinkles
источник
6

Вероятно, это будет зависеть от вашей ОС и ее реализации 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.
jordanm
источник
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
Sukima
источник
1

Со страницы руководства:

Демон будет использовать, если присутствует, определение /etc/timezoneдля часового пояса.

Среда может быть переопределена в определениях пользователя crontab, но cron будет обрабатывать задачи только в одном часовом поясе.

abligh
источник
1

Переместите ваш cronjob на 8:00 и спите один час, если вы находитесь в GMT + 1

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here
Кир
источник
Что делать, если ваш TZ Северная Америка?
swdev