Назад | Перейти на главную страницу

cron, запущенный в другом часовом поясе и команде даты, показывает другой часовой пояс

У меня CentOS, и когда я запускаю date команда в оболочке возвращает мне что-то вроде:

Чт, 28 апреля, 14:08:20 GMT 2011

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

15 7 * * * команда

он будет работать в 7 PST, а не в 7 GMT. Скажите, пожалуйста, почему это происходит?

Спасибо

Вывод команды hwclock:

/usr/sbin/hwclock --utc Невозможно получить доступ к аппаратным часам каким-либо известным способом.
Используйте параметр --debug, чтобы просмотреть подробные сведения о нашем поиске метода доступа.

И когда я запустил отладку:
/usr/sbin/hwclock --debug hwclock из util-linux-2.13-pre7 hwclock: Не удалось открыть / dev / rtc, errno = 2: Нет такого файла или каталога. Не удалось найти удобный интерфейс часов. Невозможно получить доступ к аппаратным часам любым известным способом

Скорее всего, это не ваша проблема, но стоит упомянуть - если ваш / etc / localtime изменится после загрузки crond, он будет по-прежнему зависать в предыдущем часовом поясе. Просто перезапустите / перезагрузите crond, и он примет это изменение.

Еще одна проблема заключается в том, что cron будет придерживаться переменной среды TZ. Это может быть установлено в crontab, влияя на любые строки, следующие за ним, но более вероятно, что TZ устанавливается в среде, которая загружает crond.

Я просто попробовал несколько вариантов (настраивая поля часов / мин), чтобы определить, будут ли / когда эти два задания будут выполняться. Вывод, который помещается в /tmp/tzout.localtime, также должен дать вам несколько подсказок о том, устанавливается ли $ TZ каким-либо образом в среде, загружающей crond, или нет.

* * * * *     echo $TZ `date` >> /tmp/tzout.localtime
TZ=GMT
* * * * *     echo $TZ `date` >> /tmp/tzout.gmt

Хотя я не утверждаю, что точно знаю, в чем заключается ваша проблема, надеюсь, это проливает немного света на решение!

Вопрос немного устарел, но изменение часового пояса и получение crond для распознавания изменений по-прежнему является проблемой в CentOS: я обнаружил, что после изменения часового пояса syslog deamon также должен быть перезапущен с помощью

/etc/init.d/rsyslog

Видеть Timzone неверен только для файлов журнала?

Я считаю, что cron работает на основе аппаратных часов, а не часов настроенного часового пояса. Попробуйте смотреть на «hwclock», а не на «дату», поскольку «дата» изменена на часовой пояс, настроенный вашими пользователями.

Есть два способа изменить часовой пояс (по крайней мере, в CentOS 5, 6, 7, а также в соответствующих дистрибутивах RHEL 5, 6 и 7, Amazon Linux и Amazon Linux 2, которые основаны на CentOS 6 и 7 соответственно), в зависимости от масштабов того, на что вы пытаетесь повлиять.

Во-первых, вам нужно запустить tzselect (выберите свой континент, страну и часовой пояс), чтобы получить правильное значение для вашего TZ переменная окружения, тогда:

1. Следуйте инструкциям, которые он выводит, чтобы изменить часовой пояс для программ, которые вы запускаете из командной строки, всех ваших интерактивных процессов оболочки (вот мой, например, показывающий TZ значение для восточного времени США):

You can make this change permanent for yourself by appending the line
        TZ='America/New_York'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
America/New_York

2. Но чтобы изменить "системный" часовой пояс, используемый syslog, crond, mysql, apache и любыми другими процессами-демонами, порожденными системой инициализации во время загрузки, вы должны стать пользователем root и изменить эти два файла:

/etc/sysconfig/clock
/etc/localtime

Например, при использовании сервера, размещенного в Техасе или Калифорнии, я обнаружил, что они указывают на центральное или тихоокеанское время, что неудобно для меня, и все наши пользователи, разработчики и системные администраторы тоже находятся на Восточном побережье, поэтому, чтобы изменить системное время, я делаю следующие шаги:

# step 1
sudo vim /etc/sysconfig/clock

# change ZONE from UTC (or whatever it is) to your local TZ value:
ZONE="America/New York"

# (but leave this 2nd line alone!)
UTC=True


# step 2: copy your TZ value's dir/file (under zoneinfo) onto /etc/localtime
sudo cp -v /usr/share/zoneinfo/America/New_York /etc/localtime

# step 3
reboot

# Or if all you care about is crond, for instance, just
sudo systemctl restart crond.service # for CentOS 7 / Amazon Linux 2

# Or mysql on older init.d style RHEL 6 / CentOS 6 / Amazon Linux systems:
sudo /etc/init.d/mysqld restart