Чтобы узнать текущее системное время и дату, используется команда date (без параметров выводит текущую дату и время в формате, определяемом параметрами локализации), но не time – эта команда подсчитывает время, потраченное системой на выполнение команды.
Например,
# time "find / -name \ * "
real 0m0.008s
user 0m0.001s
sys 0m0.005s
выводит, сколько процессорного времени займет составление и вывод полного списка файлов системы.
С помощью команды date можно не только узнать текущее время, но и установить его (что может сделать только root).
Стандартным для установки даты является формат
date hhmm
или
date ссyyMMddhhmm.ss
где:
- сс – век;
- yy – год;
- MM - месяц;
- dd - число месяца;
- hh - час;
- mm - минуты;
- ss - секунды.
В Solaris возможно установить сервер синхронизации времени. Клиент этого сервера - программа ntpdate. Она спрашивает время у сервера синхронизации и устанавливает его в своей системе. При небольших отклонениях времени от эталонного она вызывает функцию "мягкого изменения" времени (adjust time server), когда частота системных часов изменяется так, чтобы они догнали или затормозились до эталонного времени.
Существуют и другие средства, предназначенные для синхронизации времени в сети. Например, в локальной сети устанавливается свой сервер времени, который будет опрашивать серверы слоя 2, а компьютеры будут сверять свои часы с этим сервером времени. В качестве такого сервера в Solaris используется демон xntpd.
Для синхронизации времени в сети был разработан протокол NTP (Network Time Protocol), который предполагает существование нескольких "слоев" эталонных источников времени.
В мире есть так называемые эталонные источники времени – например, атомные часы, в которых наиболее часто применяются атомы 133Cs и точность которых составляет 10-9 сек./сут., или радиосигналы точного времени со спутников. Такие источники входят в слой 0 (stratum 0) и являются максимально точными из всех доступных эталонов времени.
К серверам слоя 0 обращаются серверы слоя 1. Работающие на последних демоны xntpd (или ntpd в других системах) распространяют точное время дальше, к серверам слоя 2 (stratum 2). К серверам слоя 2 обращаются обычные серверы точного времени.
Номер слоя фактически означает дистанцию - число промежуточных серверов времени - от данного компьютера до эталонного источника точного времени. Серверы времени одного слоя не общаются между собой.
Каждый NTP-сервер использует один или несколько источников точного времени, указанных в файле /etc/inet/ntp.conf. При старте xntpd отправляет им запрос, уточняя текущее время, и каждый из серверов опрашивается несколько раз для получения статистики задержки передачи пакета.
Сначала клиент указывает в отправляемом серверу пакете свое системное время и отправляет этот пакет, после этого сервер времени получает пакет, вкладывает в него время передачи пакета, вычисленное как разность между временем отправки и временем получения пакета сервером. Затем он вкладывает в этот же пакет свое системное время и отправляет пакет обратно, клиент получает пакет и запоминает локальное время получения пакета.
Если разница между эталонным и текущим системным временем не превышает 128 мс, то xntpd изменяет частоту системных часов для постепенной настройки времени. Если разница превышает 1000 с, xntpd предполагает, что имеет место фатальный сбой времени и завершается, оставляя запись в /var/adm/messages. Если разница находится в пределах между 128 мс и 1000 с, xntpd по умолчанию выставляет время, вызывая функцию settimeofday(). Можно запретить такое изменение демону xntpd, указав при запуске ключ -х.
Серверы времени используют UDP и порт 123.
Для получения показаний времени локальный сервер времени следует настроить для обращений к вторичным серверам, список которых можно просмотреть на http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers , там же можно получить информацию о них, например:
ServerForm
ServerStratum StratumTwo
CountryCode RU
Hostname ntp.ru
IP Address 193.124.11.11
IPv6 Address
UseDNS Yes
PoolMember Yes
ServerLocation Saint-Petersburg, Russia
GeographicCoordinates
ServerSynchronization NTP V4 secondary (Stratum 2), GNU/Unix
ServiceArea ALL
AccessPolicy OpenAccess
AccessDetails Please use the DNS hostname
NotificationMessage No
AutoKey No
AutoKeyURL
ServerContact dmitry@delfa.net
Хntpd при старте читает файл /etc/inet/ntp.conf или принимает параметры из командной строки, но ему необходимо сообщить адреса эталонных серверов и режим работы.
Если файл /etc/inet/ntp.conf не удается прочесть и с ключом -c не указан другой файл, демон, если он был заранее скомпилирован с поддержкой NetInfo, пытается найти себе эталон времени, но это не имеет смысла, если сервер времени находится за фильтром пакетов.
В командной строке вызова xntpd доступны следующие ключи:
-a - включить аутентификацию;
-A - выключить аутентификацию;
-b - синхронизироваться по широковещательным сообщениям NTP;
-c (conffile) - использовать указанный файл вместо /etc/inet/ntp.conf;
-d - включить режим отладки;
-e (authdelay) - указать время в секундах, которое требуется данной системе для вычисления ключа;
-f (driftfile) - указать путь к файлу со значением сдвига часов;
-k (keyfile) - указывает файл с ключами для аутентификации в NTP;
-l (logfile) - указывает файл протокола; по умолчанию протоколирование ведется через syslog();
-m - синхронизировать часы по multicast-сообщениям NTP на группу multicast-адресов 224.0.1.1, требует поддержки multicast в ядре;
-p (pidfile) - указывает файл, в который пишется PID процесса xntpd.
В файле /etc/inet/ntp.conf команды располагаются по одной в строке, за ключевым словом команды могут идти аргументы.
Строки, начинающиеся со знака решетки, являются комментариями, а пустые строки игнорируются. Аргументы отделяются от команды и друг от друга пробелами.
Параметры xntpd могут быть установлены в файле или из командной строки, причем ключи командной строки имеют преимущество перед установками в файле конфигурации.
Пример конфигурации:
server 198.123.30.132 prefer #NASA time server
server 194.159.73.43 #ntp.demon.nl
server 193.92.123.152
driftfile /var/db/ntp.drift #specify drift file
restrict 192.168.0.0 mask 255.255.255.0 nomodify #allow requests from LAN
Если один из серверов указан с модификатором prefer, то ответу этого сервера отдается предпочтение перед остальными, но ответ даже от предпочитаемого сервера будет отброшен, если он значительно отличается от ответов других серверов, во всех остальных случаях он будет использоваться вне зависимости от других ответов.
Параметр driftfile задает файл, который надо использовать для хранения смещения частоты системных часов и требуется xntpd для автоматической компенсации естественного смещения часов.
Для ограничения группы компьютеров, имеющих право запрашивать время у xntpd, используется параметр restrict. Например, указанная выше установка разрешает обращаться к xntpd только компьютерам из сети 192.168.0.0 с маской сети 255.255.255.0, но запрещает им требовать от сервера NTP изменить его локальное время. Таких установок может быть несколько.
Для синхронизации часов только при загрузке системы достаточно использовать ntpdate, также ее можно вызывать из cron, например:
0 * * * * root /usr/sbin/ntpdate -b -s 198.123.30.132
0 0-23 * * * root /usr/sbin/ntpdate -b -s 198.123.30.132
0 0,1,2-23 * * * root /usr/sbin/ntpdate -b -s 198.123.30.132
Ntpdate будет запускаться каждый час.
Для просмотра и изменения параметров xntpd используется программа ntpq с ключом –р, а для просмотра маршрута времени – ntptrace.
Служба времени в Solaris управляется с помощью SMF, поэтому можно использовать команды этой подсистемы:
svcprop -v svc:/network/ntp
network/entities fmri svc:/network/service
network/grouping astring require_any
network/restart_on astring error
network/type astring service
general/entity_stability astring Unstable
general/single_instance boolean true
dependents/ntp_multi-user fmri svc:/milestone/multi-user
start/exec astring /lib/svc/method/xntp
start/timeout_seconds count 1800
start/type astring method
stop/exec astring :kill
stop/timeout_seconds count 60
stop/type astring method
tm_common_name/C ustring Network\ Time\ Protocol\ \(NTP\)
tm_man_xntpd/manpath astring :default
tm_man_xntpd/section astring 1M
tm_man_xntpd/title astring xntpd
tm_man_ntpdate/manpath astring :default
tm_man_ntpdate/section astring 1M
tm_man_ntpdate/title astring ntpdate
tm_man_ntpq/manpath astring :default
tm_man_ntpq/section astring 1M
tm_man_ntpq/title astring ntpq