Пример проблемы:
* 9 * * * echo 9
* 10 * * * echo 10
Вышеуказанный код будет отправлять пользователю электронное письмо каждую минуту, но все ответы «9» будут приходить в интервале с 10:00 до 10:59, а ответы «10» будут приходить в интервале с 11:00 до 11:59.
Выполнение работы
* * * * * /bin/date ; /bin/date -u
Возвращает ожидаемую (правильную) дату и время. Это было верно как для UTC, так и для местного времени (Америка/Денвер). Изменение этого задания на запуск каждую минуту в определенный час приводит к смещению (задания, которым было сказано запуститься в 9, запускаются в 10 и т. д. и т. п.).
Текущая отладка, которую я завершил:
Ладно, это странно. Может, мой файл часового пояса как-то испорчен? Давайте проверим это
diff -s /etc/localtime /usr/share/zoneinfo/`cat /etc/timezone`
Files /etc/localtime and /usr/share/zoneinfo/America/Denver are identical
Я проверил аппаратные часы, чтобы убедиться, что они отключены или как-то не соответствуют моим локальным настройкам (запуск от имени root).
date ; hwclock
Wed Oct 26 10:50:13 MDT 2016
Wed 26 Oct 2016 10:50:14 AM MDT -0.204171 seconds
Похоже, что отклонение составляет всего секунду, но это не должно привести к тому, что мои задания cron будут выполняться на целый час позже запланированного, верно?
Я также уверен в следующем:
- Изменился ли мой часовой пояс в последнее время?Нет
- А вы пробовали вручную исправить часовой пояс?Да
- Вы сбросили cron после исправления часового пояса?Да
- Убедился ли я, что служба cron была перезапущена?Да
- Перезапустил ли я службу cron?Да
- Вы действительно уверены, что cron был перезапущен?100% уверен, что Cron был перезапущен
Другая потенциально важная информация:
Работает на Debian.
cat /etc/debian_version
8.6
Текущее ядро
uname -a
Linux BigBox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux
Обновленная отладка:
Запустил 'hwclock --systohc', не заметил заметных изменений в поведении. Запустил эту команду для проверки
date;hwclock
Wed Oct 26 12:39:09 MDT 2016
Wed 26 Oct 2016 12:39:11 PM MDT -0.875328 seconds
Я не могу запустить 'cat /etc/sysconfig/clock', так как этот файл не существует. Запуск команды find в дереве /etc/ для поиска 'clock' подтверждает, что у меня нет там файла с таким именем.
Проверил, не установило ли что-нибудь из известных мне переменную CRON_TZ. Она не установлена ни на уровне пользователя, ни на уровне корней. Вызов cron echo их не даст никакого результата.
решение1
Еще одно место для поиска: скрипт(ы) start-at-boot для cron
, или файл crontab старой школы системы /etc/crontab
. Возможно, что переменная окружения TZ устанавливается, скажем, /etc/init.d/cronie
или /lib/systemd/system/crond.service
, я не уверен, что Debian использует для init system.
Я видел что-то подобное, когда пытался запускать crond
что-то каждый час:
0 */2 * * * /opt/dbms/rainstor/archiving/ama_term
crond
запустил скрипт по нечетным часам. Я подозревал, но так и не доказал себе, что это связано с путаницей с летним временем.