Проблема с часовым поясом cron

11

Мои задания cron вычисляются на час позже по сравнению с серверным временем. Я не понимаю, что происходит.

Моя конфигурация следующая:

Время сервера:

Europe/Paris

В / etc / default / cron я добавил следующую строку:

TZ="Europe/Paris"

Несмотря на это, задания cron запускаются на час позже времени сервера. Что действительно сложно, так это то, что, если я прошу cron воспроизвести инструкцию «date», она выдаст дату сервера (хорошая!).

Я понятия не имею, как решить эту проблему; Я немного читал на форумах, но ничего интересного не нашел.

Как вы думаете ?

Гийом Лебуржуа
источник
4
Таким образом, рабочие места cron запланированы в UTC. Страница руководства Vixie cron гласит: «Демон будет использовать, если имеется, определение из / etc / timezone для часового пояса». Что внутри /etc/timezone? Вы изменили /etc/timezoneпозже, чем cronпроцесс был начат? Ты пробовал /etc/init.d/cron restart?
Кит Томпсон
3
/ etc / timezone был недавно изменен без перезапуска /etc/init.d/cron. Я попытаюсь перезапустить его.
Гийом Лебуржуа

Ответы:

16

(Копирую мой комментарий как ответ, так как он оказался решением; я угадала правильно.)

Таким образом, задания cron планируются в UTC ( Europe/Parisс часовым смещением от UTC).

На странице руководства Vixie cron написано:

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

Что внутри /etc/timezone? Вы модифицировали /etc/timezoneболее недавно, чем процесс cron? Ты пробовала

/etc/init.d/cron restart

?

Кит Томпсон
источник
3

Некоторые дистрибутивы, такие как Fedora, предоставляют механизм, позволяющий CRON_TZ=переопределить часовой пояс по умолчанию.

От Fedora man 5 crontab

Переменная CRON_TZ указывает часовой пояс, определенный для таблицы cron. Пользователь должен ввести время в соответствии с указанным часовым поясом в таблицу. Время, используемое для записи в файл журнала, берется из местного часового пояса, где работает демон.

Что-то вроде этого:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash
ОДС
источник
1

Википедия говорит

Большинство реализаций cron просто интерпретируют записи crontab в настройках системного часового пояса, в которых запускается сам демон cron. Это может стать источником спора, если большая многопользовательская машина имеет пользователей в нескольких часовых поясах, особенно если системный часовой пояс по умолчанию включает потенциально сбивающее с толку летнее время. Таким образом, реализация cron может в особых случаях использовать любые строки установки переменной окружения "TZ =" в пользовательских crontabs, интерпретируя последующие записи crontab относительно этого часового пояса.

Так что, возможно, ваш логин имеет настройку TZ, которая отличается от настройки TZ системы?

RedGrittyBrick
источник
1

Перезапуск cron был тем, что мне было нужно, но для меня команда была

/etc/init.d/crond restart (crond not cron)
ARX-е
источник
0

Только что понял это на Ubuntu 14/16. Работал отлично для меня.

Шаги (подразумевается sudo):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone
Варун Чандак
источник
Куда cronперезапустить?
DavidPostill
Мне не нужно было перезапускать cron.
Варун Чандак