Зміна часового поясу кроні


10

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


4
Це питання крос-розміщений на StackOverflow: stackoverflow.com/questions/29592533 / ...
John1024

Який часовий пояс встановлено в / etc / timezone?
Мерехтіння

Відповіді:


2

Перевірте свої налаштування в / etc / timezone. У згаданому вами запитанні ви знаходитесь в "GMT + 1", якщо саме так встановлено ваш часовий пояс, ваш сценарій завжди буде виконуватися в UTC плюс одна година. Якщо встановити його, наприклад, "Європа / Париж", час виконання буде змінюватися залежно від літнього часу.


6

Це, ймовірно, буде залежати від вашої ОС та її реалізації 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

1

З сторінки керівництва:

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

Навколишнє середовище може бути переосмислено у визначеннях користувачів crontab, але cron буде обробляти завдання лише в одному часовому поясі.


1

Перемістіть роботу на 8:00 і спайте одну годину, якщо ви є GMT + 1

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

Що робити, якщо ваш TZ - Північна Америка?
swdev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.