Кто-нибудь может объяснить, как ntpd
и /etc/localtime
и system clock
взаимодействуют друг с другом в UNIX или, точнее, во FreeBSD?
Я даю следующее подробное описание концепций на тот случай, если я неправильно понимаю некоторые из них, чтобы вы могли указать на это. Мой настоящий вопрос ниже.
ДАТА Когда мы делаем "date modify
"в оболочке, я думаю, это изменит /etc/localtime
. /etc/localtime
содержит дату и время, а также информацию о часовом поясе, которую запрашивает glibc
функции как localtime()
и часовой пояс также можно установить вручную с помощью tzset()
.
часы Судя по другим материалам в Интернете, в компьютере есть два часа: hardware clock
и system clock
. Аппаратные часы поддерживаются батареей на материнской плате, а системные часы - это программная концепция. Системные часы будут установлены аппаратными часами при загрузке системы. Но позже это может быть изменено ntpd
(поправьте меня если я ошибаюсь).
ntpd nptd
это процесс пользовательского пространства, который запускается через несколько секунд после запуска системы. Он будет запрашивать некоторые определенные серверы ntp, настроенные ntp.conf
. Он имеет функцию медленной регулировки дрейфа времени, так как он не вносит резких изменений во время. (но как насчет часового пояса, будет ли ntpd запрашивать часовой пояс и постепенно его менять? это может занять слишком много времени ..) Для резкого обновления времени есть ntpupdate()
api.
Вопрос
Я не нашел ресурса, объясняющего взаимодействие между ними. Кажется, что у каждой из этих концепций есть несколько независимых локальных файлов, которые нужно трогать и хранить. Причина, по которой я спрашиваю, заключается в том, что я наблюдаю, что для написанного мной процесса, который вызывает localtime
динамически каждый раз, когда пользователь запрашивает отображение некоторых данных, это не отражает изменение часового пояса, обновленное date modify
(Ни время, ни часовой пояс не изменились в процессе).
Если я правильно вас понял, я думаю, что следующие ответы на основной вопрос вашего вопроса:
Чтобы изменить часовой пояс, замените свой /etc/localtime
с одним из файлов в /usr/share/zoneinfo
дерево каталогов. Установка времени с помощью date
не изменяет часовой пояс и, следовательно, ничего не делает с /etc/localtime
файл.
Обратите внимание, что изменение /etc/localtime
не обязательно влияет на запущенные процессы. Перезагрузитесь, если хотите, чтобы все демоны видели новый часовой пояс.