UMGUM.COM (лучше) 

Linux + Дата и время ( Настрока системной даты и времени на "Linux Debian". )

23 марта 2010  (обновлено 29 мая 2017)

OS: Debian Lenny.

Задача: выставить точное локальное время на компьютере.

Для себя я уяснил, что есть два основных подхода к отслеживанию времени на локальном компьютере. Один из них, пользовательский, так сказать, использует Windows, приравнивая показатели аппаратных часов BIOS к местному времени; пользователю нет необходимости забивать себе голову разницей между часовыми поясами и отношением показателей аппаратного таймера BIOS к местному времени. Другой подход, более строгий и логичный, на мой взгляд, используют системы на основе Unix; в часах BIOS сохраняется время, приравненное к UTC, грубо говоря, к Гринвичскому, а местное время выводится путём добавления к аппаратному данных о текущем часовом поясе (GMT).

Тонкостей с выставлением локального системного времени в Windows никаких нет, так что далее речь пойдет исключительно о потомках Unix.


Проводим предварительную разведку:

# date

Видим что то вроде этого:

Sat Oct 24 18:39:13 Zimbabwe 2009

Обнаруживаем, что компьютер живет в отличном от нашего временном поясе (GMT), что чревато не согласованиями в процессе работы приложений.
Идём в файловую систему и ищем описания временных зон для данной реализации системы. Возможно находим их в районе "/usr/share/zoneinfo". Приводим значение GMT к вменяемому виду:

Ищем в директории "zoneinfo" каталог, имя которого соответствует нашей временной зоне (например Asia).
Ищем в директории, соответствующей нашей временной зоне, файл, имя которого соответствует месту, которое находится в нашей временной зоне (например Almaty).
Приводим конфигурационный файл "/etc/timezone" к следующему виду:

Asia/Almaty

Ищем в директории "zoneinfo" каталог, имя которого соответствует нашей временной зоне (например Asia).
Ищем в директории, соответствующей нашей временной зоне, файл, имя которого соответствует месту, которое находится в нашей временной зоне (например Almaty).
Удаляем файл "/etc/localtime" и создаем ссылку на тот файл, что описывает нашу временную зону:

# rm /etc/localtime
# ln -sf /usr/share/zoneinfo/Asia/Almaty /etc/localtime

Имеет смысл проверить на наличие и содержимое ещё один конфигурационный файл "/etc/sysconfig/clock" (в каких то дистрибутивах он есть, в каких-то нет). В нем указание системе на то, что она должна выставлять смещения к показателям аппаратных часов BIOS, интерпретируемых как UTC, в соответствии с приведённым часовым поясом для системного локального времени.

ZONE="Asia/Almaty"
UTC=true
ARC=false

Простейший способ установить системную дату с помощью встроенных средств — отдать следующую комманду (где mm – месяц, dd – день, HH -час в 24 часовой схеме, MM — минуты, yy – последние две цифры текущего года):

# date mmddHHMMyy

После того, как мы навели порядок с отображением локального времени и откорректировали его показания, неплохо было бы сохранить эти данные в аппаратных часах BIOS. Большинство современных дистрибутивов Linux и Unix имеют соответствующую скриптовую составляющую, что сделает эту работу за нас при штатной остановке работы системы; но мало ли что может произойти? Можно сделать эту работу вручную.

Команда "hwclock" позволяет нам получить состояние аппаратных часов и увидеть, после сравнения с выводом команды date, насколько локальное системное и аппаратное время различается.

Следующая команда установит время аппаратных часов равным UTC (Гринвичскому) на основании текущего локального системного времени:

# hwclock --systohc --utc


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )