Время от времени часы на компьютере могут сбиваться по различным причинам, время может быть установлено изначально неправильно или неправильно выбран часовой пояс. Хотя в системе по умолчанию настроена синхронизация времени с интернетом и я уже давно забыл что значит постоянно перенастраивать часы, если они отстают, такая необходимость может появиться.
В этой статье мы рассмотрим как выполняется установка времени Linux различными способами, через терминал, графический интерфейс и так далее. Но сначала нам нужно понять как работает время.
Как работает время на компьютере?
Статья ориентирована на новичков, в первую очередь на них, потому что профессионалы уже и так знают как это сделать. Поэтому сначала рассмотрим как работает время в Linux. Когда компьютер работает часы идут, это ясно, но когда вы его отключаете, а затем включаете снова часы показывают не то время, на котором остановились, а правильное время. Это происходит потому, что часы на материнской плате идут постоянно. Таймер питается от той же батарейки, что и энергозависимая память BIOS.
Операционная система передает значение таймера в память BIOS при выключении и берет его оттуда при включении. Отсюда берутся проблемы со временем при двойной загрузке Windows и Linux, но эта тема раскрыта в другой статье — сбивается время в Ubuntu и Windows. Другая проблема почему может сбиваться время — это неверно установленный часовой пояс. Если вы установили часовой пояс linux неверно, то часы будут постоянно синхронизироваться через интернет и идти неверно.
Когда все проблемы с временем будут устранены, можно перейти установить нужное время и быть уверенным что оно не будет сбиваться. Дальше рассмотрим как это сделать.
Вы можете видеть текущее время прямо на вашем рабочем столе, в KDE часы добавлены на панель, да и в Gnome, они размещены по центру панели по умолчанию:
Если навести курсор на время, вы увидите более подробную информацию, область уведомлений и календарь.
Но настроить время здесь уже не получится. Для этого нужно открывать настройки системы. Мы будем рассматривать настройки для Gnome. Откройте меню Dash и наберите в строке поиска «Параметры»:
Дальше откройте «Дата и время»:
Как видите, здесь уже установлено значение по умолчанию «Автоматическое определение даты и времени», а внизу есть пункт, который отвечает за часовой пояс.
Вы можете просто поменять часовой пояс чтобы время синхронизировалось правильно, если что-то не так. Также можно задать время вручную. Для этого сначала отключите автоматическую синхронизацию, а затем выберите дату и время:
Никаких кнопок нажимать не нужно, закройте окно выбора и новое время будет применено. Вы всегда можете вернуть настройки до значения по умолчанию.
Установка времени через терминал
Кроме графического интерфейса, у вас есть возможность делать все необходимые действия через терминал. Для этого есть утилита date. Сначала смотрим текущее время:
date
У утилиты есть множество опций отображения и настроек, но мы не будем их рассматривать. Есть еще одна команда, которая позволяет посмотреть системное время linux:
sudo hwclock -r
Чтобы установить время можно использовать ту же команду date. Для этого ей нужно передать строку со временем и датой, например:
date --set="строка"
В качестве строки можно брать ту, которую возвращает команда date без параметров, только она должна быть на английском, поэтому сразу смотрим:
LANG=en_US date
Затем меняем:
sudo date --set "Wed Sep 6 20:43:36 EEST 2017"
Если у вас включена коррекция даты через интернет, то ее нужно отключить перед этим, потому что вы даже заметить изменений не успеете, как сервер времени linux установит правильное время. Можно сократить эту строку:
sudo date --set "Sep 6 20:43:36 2017"
Это даст тот же результат. Еще один вариант — указать формат данных, которые вы собираетесь передавать с помощью модификаторов, например, изменить время linux:
sudo date +%T -s "20:43:36"
Здесь формат очень прост — часы:минуты:секунды. Можно давать время в 12 часовом формате, для этого добавьте модификатор %p:
date +%T%p -s "8:43:36PM"
Вы изменяете текущее время, но аппаратное системное время linux не изменяется, чтобы сохранить изменения используйте команду:
sudo hwclock -w
Еще один новый инструмент от systemd для управления временем — timedatectl. С помощью него можно выполнить те же операции, сначала смотрим доступную информацию о времени:
timedatectl
Текущее системное время отображается в строке Local Time. Чтобы изменить дату, используйте опцию -set-time. Синтаксис передаваемого ей параметра такой: ГГГГ-ММ-ДД ЧЧ:ММ:СС. Думаю тут понятно и без комментариев. Например:
sudo timedatectl --set-time "2017-09-06 20:43:36"
Можно задать только время, тогда нужно использовать синтаксис времени ЧЧ:ММ:СС, например:
sudo timedatectl --set-time "20:43:36"
Еще раз говорю, что если включена синхронизация по сети, то вы не сможете изменить время. Но с помощью timedatectl ее можно отключить:
sudo timedatectl set-ntp no
Или включить обратно:
sudo timedatectl set-ntp yes
C помощью этой же команды можно не только установить время linux, но и настроить часовой пояс, для этого используйте опцию set-timezone:
sudo timedatectl set-timezone 'Russia/Moscov'
Вы можете посмотреть список доступных часовых поясов командой:
timedatectl list-timezones
Видео о настройке времени с помощью timedatectl:
Выводы
Вот и все. Теперь вы знаете как выполняется установка времени linux. Как видите, это очень просто, вы можете использовать различные способы, в зависимости от того, что вам будет удобнее. Если у вас остались вопросы, спрашивайте в комментариях!
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
В статье мы разберёмся с тем, как настроить время в Linux. Посмотрим текущее время, укажем часовой пояс и настроим синхронизацию времени.
Чтобы посмотреть текущее время на вашем сервере linux воспользуйтесь командой date:
alex@ubu:~$ date Ср 13 июл 2022 13:40:27 UTC
В выводе мы видим не только дату и время, но также и часовой пояс. Сейчас вместо часового пояса используется UTC.
Также можно использовать другую команду – timedatectl:
alex@s-ubu:~$ timedatectl Local time: Ср 2022-07-20 07:56:41 UTC Universal time: Ср 2022-07-20 07:56:41 UTC RTC time: Ср 2022-07-20 07:56:41 Time zone: UTC (UTC, +0000) System clock synchronized: yes NTP service: active RTC in local TZ: no
Без опций она покажет текущее время, часовой пояс, а также другую информацию связанную с синхронизацией времени. Например в примере выше видно что время успешно синхронизуется (System clock synchronized: yes) и синхронизация настроена (NTP service: active).
С помощью этой же утилиты (timedatectl) мы будем настраивать часовой пояс и следить за синхронизацией времени, об этом чуть ниже.
Настройка часового пояса
Вообще часовой пояс в системе определяется файлом /etc/localtime, который является символьной ссылкой (про ссылки я уже писал):
alex@ubu:~$ ls -l /etc/localtime lrwxrwxrwx 1 root root 27 апр 21 01:01 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
Можно вручную отредактировать эту ссылку и указать нужный часовой пояс:
alex@ubu:~$ sudo ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Или воспользоваться утилитой timedatectl:
alex@ubu:~$ sudo timedatectl set-timezone Europe/Moscow
Если вас не устраивает выбранный мною часовой пояс, то можете посмотреть список поддерживаемых часовых поясов так:
alex@ubu:~$ timedatectl list-timezones
Проверим время и часовой пояс:
alex@ubu:~$ timedatectl Local time: Ср 2022-07-13 16:50:39 MSK Universal time: Ср 2022-07-13 13:50:39 UTC RTC time: Ср 2022-07-13 13:50:39 Time zone: Europe/Moscow (MSK, +0300) System clock synchronized: yes NTP service: active RTC in local TZ: no
Как видим, часовой пояс уже изменился на Europe/Moscow (MSK, +0300).
Синхронизация времени
В настоящее время очень важно чтобы часы на ваших серверах были синхронизированы. Очень много систем полагаются на время, например:
- если часы на сервере kerberos и клиенте расходятся более чем на 5 минут, то клиенты не смогут пройти проверку подлинности на сервере;
- в различных финансовых системах транзакции должны выполняться в надлежащем порядке, поэтому серверы выполняющую эту работу должны быть строго синхронизированы по времени;
- правильное время также нужно для выполнения автоматизированный задач;
- системные журналы также полагаются на время.
Получение списка NTP серверов по DHCP
Если ваш сервер получает сетевые настройки по dhcp, то он может получить список NTP серверов (серверов времени для синхронизации). Это настраивается в файле /etc/dhcp/dhclient.conf. В строке request мы определяем что хотим получать от сервера dhcp. И здесь может быть указан параметр ntp-servers:
alex@ubu:~$ cat /etc/dhcp/dhclient.conf # часть текста пропустил request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers; # часть текста пропустил
Само собой, вы получите список ntp-серверов, только в том случае если ваш dhcp сервер их распространяет.
Служба синхронизации времени
В системах работающих на systemd работает специальная служба синхронизации времени systemd-timesyncd.service. Можем посмотреть её статус:
alex@ubu:~$ systemctl status systemd-timesyncd.service ● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-07-13 17:08:06 MSK; 23s ago Docs: man:systemd-timesyncd.service(8) Main PID: 399 (systemd-timesyn) Status: "Initial synchronization to time server 192.168.0.16:123 (192.168.0.16)." Tasks: 2 (limit: 2241) Memory: 1.3M CPU: 63ms CGroup: /system.slice/systemd-timesyncd.service └─399 /lib/systemd/systemd-timesyncd
Видим что синхронизация идет с сервером по адресу 192.168.0.16. У меня этот адрес прилетел по dhcp.
Обратите внимание, что служба эта стартует по запросу и останавливается после синхронизации времени!
Давайте выключим получение ntp серверов по dhcp:
alex@ubu:~$ sudo nano /etc/dhcp/dhclient.conf # в этой строке удалите опцию ntp-servers request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes;
Вы можете использовать следующий пул серверов времени для синхронизации – https://www.pool.ntp.org/zone/ru. Укажем первый сервер из этого пула в конфиге /etc/systemd/timesyncd.conf:
alex@ubu:~$ sudo nano /etc/systemd/timesyncd.conf [Time] NTP=0.ru.pool.ntp.org FallbackNTP=ntp.ubuntu.com RootDistanceMaxSec=5 PollIntervalMinSec=32 PollIntervalMaxSec=2048
В конфиге используются следующие опции:
- NTP – укажите 1 или несколько ntp серверов. Если хотите указать несколько серверов, разделяйте их пробелами;
- FallbackNTP – укажите 1 или несколько резервных ntp серверов;
- RootDistanceMaxSec – максимальное время в секундах, за которое пакет от сервера эталонного времени должен доходить до сервера к которому мы подлкючены;
- PollIntervalMinSec и PollIntervalMaxSec – минимальный и максимальный интервалы синхронизаций времени. Вначале используется минимальный интервал, а затем он увеличивается если система видит что локальное время со временем ntp-сервера не расходится.
После правки перезапустите службу синхронизаций времени:
alex@ubu:~$ sudo systemctl restart systemd-timesyncd.service
Дополнительно можно посмотреть информацию по синхронизации времени с помощью следующей команды:
alex@ubu:~$ timedatectl timesync-status Server: 91.209.94.10 (0.ru.pool.ntp.org) Poll interval: 34min 8s (min: 32s; max 34min 8s) Leap: normal Version: 4 Stratum: 2 Reference: 3EE70662 Precision: 1us (-25) Root distance: 4.012ms (max: 5s) Offset: -5.502ms Delay: 11.084ms Jitter: 2.886ms Packet count: 7 Frequency: +15,118ppm
Здесь мы видим адрес ntp-сервера, а также какой интервал синхронизации (34min 8s) использовался последний раз.
То-есть служба синхронизации времени systemd-timesyncd.service будет запускаться и останавливаться сейчас примерно раз в 34 минуты. Поэтому если увидите, что служба в состоянии loaded и inactive, не пугайтесь. По логам видно что она периодически запускается:
alex@ubu:~$ systemctl status systemd-timedated ○ systemd-timedated.service - Time & Date Service Loaded: loaded (/lib/systemd/system/systemd-timedated.service; static) Active: inactive (dead) Docs: man:systemd-timedated.service(8) man:localtime(5) man:org.freedesktop.timedate1(5) июл 19 15:54:24 s-ubu systemd[1]: systemd-timedated.service: Deactivated successfully. июл 19 15:55:41 s-ubu systemd[1]: Starting Time & Date Service... июл 19 15:55:41 s-ubu systemd[1]: Started Time & Date Service. июл 19 15:56:35 s-ubu systemd[1]: systemd-timedated.service: Deactivated successfully. июл 19 16:05:45 s-ubu systemd[1]: Starting Time & Date Service... июл 19 16:05:45 s-ubu systemd[1]: Started Time & Date Service. июл 19 16:06:15 s-ubu systemd[1]: systemd-timedated.service: Deactivated successfully. июл 19 16:28:42 s-ubu systemd[1]: Starting Time & Date Service... июл 19 16:28:42 s-ubu systemd[1]: Started Time & Date Service. июл 19 16:30:17 s-ubu systemd[1]: systemd-timedated.service: Deactivated successfully.
Из вывода:
- Deactivated successfully – служба останавливается;
- Starting Time & Date Service… – служба стартует;
- Started Time & Date Service – служба стартовала;
- и так по кругу.
Ещё один способ задать часовой пояс
С помощью команды dpkg-reconfigure tzdata также можно задать часовой пояс:
alex@ubu:~$ sudo dpkg-reconfigure tzdata
После выполнения вы можете использовать псевдографический интерфейс для настройки часового пояса. Вначале выберите географический район:
Затем город:
Итог
Теперь вы знаете как настроить время на сервере Debian или Ubuntu. Мы научились устанавливать часовой пояс и настраивать синхронизации времени с ntp серверами.
Узнали про следующие команды:
- date – покажет текущую дату, время и часовой пояс;
- timedatectl – покажет тоже самое что и date + синхронизуется ли время;
- timedatectl list-timezones – покажет список поддерживаемых часовых поясов;
- timedatectl set-timezone Europe/Moscow – установить часовой пояс Europe/Moscow;
- timedatectl timesync-status – покажет с какими ntp-серверами синхронизуется время и как часто;
- dpkg-reconfigure tzdata – установить часовой пояс.
Познакомились с файлами:
- /etc/localtime – является символической ссылкой и содержит информацию о текущем часовом поясе;
- /etc/dhcp/dhclient.conf – настройки dhcp-клиента, который умеет запрашивать ntp-сервера для синхронизации времени;
- /etc/systemd/timesyncd.conf – настройки службы синхронизации времени.
Узнали про службу синхронизации времени:
- systemd-timedated.service – стартует по запросу, а после синхронизации времени отключается до следующей синхронизации.
Сводка
Имя статьи
Дата, время и часовой пояс в Linux
Описание
В статье мы разберёмся с тем, как настроить время в Linux. Посмотрим текущее время, укажем часовой пояс и настроим синхронизацию времени
Команда date
отображает или устанавливает системную дату. Чаще всего он используется для печати даты и времени в разных форматах и для расчета будущих и прошлых дат.
Использование Date
Синтаксис date
команды следующий:
date [OPTION]... [+FORMAT]
Чтобы отобразить текущее системное время и дату, используя форматирование по умолчанию, вызовите команду без каких-либо параметров и аргументов:
date
Выходные данные включают день недели, месяц, день месяца, время, часовой пояс и год:
Sat Jun 1 14:31:01 CEST 2019
Параметры форматирования даты
Вывод date
команды может быть отформатирован с помощью последовательности символов управления форматом, перед которой стоит +
знак. Элементы управления форматом начинаются с %
символа и заменяются их значениями.
date +"Year: %Y, Month: %m, Day: %d"
Символ %Y
будет заменен на год, %m
месяц и %d
день месяца:
Year: 2019, Month: 06, Day: 02
Вот еще один пример:
date "+DATE: %D%nTIME: %T"
DATE: 06/02/19
TIME: 01:47:04
Ниже приведен небольшой список некоторых наиболее распространенных символов форматирования:
%a
— Сокращенное название дня недели (например, понедельник)%A
— Сокращенное полное название дня недели (например, понедельник)%b
— Сокращенное название месяца (например, январь).%B
— сокращенное длинное название месяца (например, январь)%d
— день месяца (например, 01)%H
— час (00..23)%I
— час (01.12.12)%j
— День года (001..366)%m
— Месяц (01.12.12)%M
— Минута (00..59)%S
— Второй (00 .. 60)%u
— день недели (1..7)%Y
— Полный год (например, 2019)
Чтобы получить полный список всех параметров форматирования, запустите date --help
или man date
в своем терминале.
Пользовательское форматирование даты
-d
Опция позволяет работать на дату конкретного. Вы можете указать дату в виде удобочитаемой строки даты, как показано ниже:
date -d "2010-02-07 12:10:53"
Sun Feb 7 12:10:53 CET 2010
Использование пользовательского форматирования:
date -d '16 Dec 1974' +'%A, %d %B %Y'
Monday, 16 December 1974
Строка даты принимает значения, такие как «завтра», «пятница», «последняя пятница», «следующая пятница», «следующий месяц», «следующая неделя» .. и т. Д.
date -d "last week"
Sat May 25 14:31:42 CEST 2019
Вы также можете использовать параметр строки даты, чтобы показать местное время для разных часовых поясов. Например, чтобы показать местное время 6:30 утра следующего понедельника на восточном побережье Австралии, введите:
date -d 'TZ="Australia/Sydney" 06:30 next Monday'
Sun Jun 2 22:30:00 CEST 2019
Переопределить часовой пояс
Команда date
возвращает дату в системном часовом поясе по умолчанию . Чтобы использовать другой часовой пояс, установите переменную среды TZ
в желаемый часовой пояс.
Например, чтобы показать время в Мельбурне, введите:
TZ='Australia/Melbourne' date
Sat Jun 1 22:35:10 AEST 2019
Чтобы получить список всех доступных часовых поясов , вы можете либо перечислить файлы в /usr/share/zoneinfo
каталоге, либо использовать timedatectl list-timezones
команду.
Конвертер эпох
date
Команда может быть использована в качестве преобразователя Epoch. Время, или метки времени Unix, — это количество секунд, прошедших с 1 января 1970 года в 00:00:00 UTC.
Чтобы напечатать количество секунд от эпохи до текущего дня, вызовите date
с %s
контролем формата:
date +%s
1559393792
Чтобы преобразовать секунды с начала эпохи в дату, установите секунды в виде строки даты с префиксом @
:
date -d @1234567890
Sat Feb 14 00:31:30 CET 2009
Использование date
с другими командами
Команда date
чаще всего используется для создания имен файлов, которые содержат текущее время и дату.
Команда ниже создаст файл резервной копии Mysql в следующем формате database_name-20190601.sql
mysqldump database_name > database_name-$(date +%Y%m%d).sql
Вы также можете использовать date
команду в своих сценариях оболочки. В приведенном ниже примере мы присваиваем выход date
к date_now
переменной:
date_now=$(date "+%F-%H-%M-%S")
echo $date_now
2019-06-01-15-02-27
Показать время последнего изменения файла
Команда date
с -r
параметром показывает время последнего изменения файла. Например:
date -r /etc/hosts
Tue Jul 24 11:11:48 CEST 2018
Если вы хотите изменить временную метку файла, используйте touch
команду .
Установите системное время и дату
Установка системного времени и даты вручную с помощью этой date
команды не рекомендуется, поскольку в большинстве дистрибутивов Linux системные часы синхронизируются с ntp
помощью systemd-timesyncd
служб или .
Однако, если вы хотите установить системные часы вручную, вы можете использовать эту --set=
опцию. Например, если вы хотите установить дату и время 17:30, 01 июня 2019 г., введите:
date --set="20190601 17:30"
Вывод
Команда Linux date
отображает или устанавливает системную дату и время.
Немного теории. В любом компьютере есть два вида часов. Одни аппаратные (ЧРВ — часы реального времени или RTC — real time clock), которые работают даже при выключенном блоке питания, на это у них есть батарейка на материнской плате. Другие программные, то есть часы операционной системы. Показания этих часов могут различаться. При этом программные часы опираются на показания аппаратных при старте операционной системы. А в дальнейшем могут синхронизироваться через интернет с эталонными и корректировать ход аппаратных.
В большинстве случаев если компьютер работает под управлением операционной системой Windows показания аппаратных и программных часов совпадают. В Linux же чаще всего аппаратные часы настраивают по гринвичу (времени нулевого меридиана), а программные по необходимому смещению для часового пояса где расположен сервер.
Абсолютное большинство программ (приложений и сервисов) в своей работе опираются на показания системных (программных) часов.
Установка времени в ОС Linux
Время от времени часы на компьютере могут сбиваться по различным причинам, время может быть установлено изначально неправильно или неправильно выбран часовой пояс. Хотя в системе по умолчанию настроена синхронизация времени с интернетом и я уже давно забыл что значит постоянно перенастраивать часы, если они отстают, такая необходимость может появиться. В этой статье мы рассмотрим как выполняется установка времени Linux различными способами, через терминал, графический интерфейс и так далее. Но сначала нам нужно понять как работает время.
Установка временной зоны (timezone)
Временная зона под Linuxом устанавливается через символическую ссылку, из /etc/localtime на файл из дирректории /usr/lib/zoneinfo(или /usr/share/zoneinfo), чем указывается в какой временной зоне вы находитесь. Например я живу в Киев (Киевский часовой пояс EET) я должен сделать ссылку /etc/localtime на файл /usr/lib/zoneinfo/Europe/Kiev. Для этого даем команду:
ln -sf ../usr/share/zoneinfo/Europe/Kiev /etc/localtime
Замените your/zoneна соответствующую вашему месту расположения зону, например Europe/Moscow или Australia/Perth. Чтобы узнать какие временные зоны доступны посмотрите в дирректорию /usr/lib/zoneinfo(или /usr/share/zoneinfo).
Как задать время через консоль в Linux?
Как задать время через консоль в Linux? Как установить дату в Linux?
Кроме графического интерфейса, у вас есть возможность делать все необходимые действия через терминал. Для этого есть утилита date.
Самое первое, что может нам понадобиться — просмотр текущей даты и времени. Узнаём время с помощью команды
$ date
Втр Сен 17 12:36:46 UTC 2017
Linux установка даты
date +%Y%m%d -s "20170917"
Linux задать время из консоли
date -s "16:17:00"
Задать время и дату одновременно:
date -s "17 SEP 2017 16:17:00"
Если указать только дату без времени, то время будет установлено в 0 часов 0 минут:
date -s "17 SEP 2017"
Выдаст результат:
Вск Сен 13 00:00:00 UTC 2017
Однако, сразу после этих команд, стсемное время возвращается к предыдущему значению. Поэтому нужно вначале установить аппаратные часы. Узнать, сколько времени на аппаратных часах, можно командой:
hwclock
ранее эта команда называлась clock.
Установить аппаратные часы можно командой:
hwclock --set --date="2011-08-14 16:45:05"
После чего надо засинхронизировать системные часы с аппаратными:
hwclock -s
По идее, если временная зона настроена как локальная, после этой команды время на компьютере будет таким же как и на аппаратных часах.
Если вы сталкиваетесь с ошибкой:
date: cannot set date: Operation not permitted
Учтите, что время и дату имеет право изменять только root-пользователь. Поэтому задавайте время с sudo:
sudo date +%Y%m%d -s "20170917"
Текущее системное время отображается в строке Local Time. Чтобы изменить дату, используйте опцию -set-time. Синтаксис передаваемого ей параметра такой: ГГГГ-ММ-ДД ЧЧ:ММ:СС. Думаю тут понятно и без комментариев.
Дополнительную информацию вы можете получить командой
date --help
Состояние перевода: На этой странице представлен перевод статьи System time. Дата последней синхронизации: 4 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
В операционной системе время (часы) определяется тремя понятиями: значением времени (будь то местное время, UTC или что-то другое), часовым поясом и информацией о переходе на летнее время (DST), если это применимо. Эта статья рассказывает, что это такое и как их читать и менять. В системах присутствуют двое часов: аппаратные часы и системные часы, которые также подробно описаны в этой статье.
Стандартное поведение большинства операционных систем таково:
- При загрузке для системных часов устанавливается значение из аппаратных часов.
- Поддерживается точное время системных часов; смотрите #Синхронизация времени.
- При выключении для аппаратных часов устанавливается значение из системных часов.
Аппаратные часы
Аппаратные часы (они же часы реального времени (RTC) или часы CMOS) хранят следующие значения: год, месяц, день, час, минута и секунда. Только в прошивках UEFI 2016 года или новее есть возможность хранить часовой пояс, а также информацию о переходе на летнее время.
Просмотр времени из аппаратных часов
# hwclock --show
Изменение времени аппаратных часов по системным часам
Следующая команда устанавливает время в аппаратных часах, беря значение из системных часов. Кроме того, она обновляет файл /etc/adjtime
или создаёт его, если он отсутствует. Смотрите раздел «The Adjtime File» в hwclock(8) для более подробной информации, а также раздел #Погрешность часов.
# hwclock --systohc
Системные часы
Системные часы (они же программные часы) отслеживают время, часовой пояс и информацию о переходе на летнее время, если применимо. В ядре Linux они представлены как количество секунд, прошедших с полуночи 1 января 1970 года по UTC. Начальное значение системных часов вычисляется из аппаратных часов в зависимости от содержимого файла /etc/adjtime
. После завершения загрузки системные часы работают независимо от аппаратных часов. Ядро Linux отслеживает системные часы путём подсчета прерываний таймера.
Просмотр времени
Для проверки текущего времени системных часов (представленных как в местном времени, так и в UTC), а также RTC (аппаратных часов):
$ timedatectl
Изменение времени системых часов
Установка местного времени для системых часов:
# timedatectl set-time "гггг-ММ-дд чч:мм:сс"
Например:
# timedatectl set-time "2014-05-26 11:13:54"
Установит 26 мая 2014 года, 11 часов 13 минут 54 секунды.
Стандарт времени
Есть два основных стандарта времени: местное (локальное) время (localtime) и Всемирное координированное время (Coordinated Universal Time, UTC). Местное время зависит от текущего часового пояса, а время UTC — это глобальное время, которое одинаково для всех и не зависит от часовых поясов. UTC иногда называют гринвичским временем (GMT), хотя это немного разные вещи.
Стандарт, который будет использоваться в аппаратных часах, выбирается операционной системой. По умолчанию Windows использует местное время, macOS использует UTC, а другие UNIX и UNIX-подобные системы используют разные стандарты. ОС, использующая стандарт UTC, обычно рассматривает аппаратные часы как UTC и вносит в них поправку для установки времени ОС при загрузке в соответствии с часовым поясом.
Если на машине установлено несколько операционных систем, все они будут получать текущее время от одних и тех же аппаратных часов: рекомендуется настроить их на использование UTC, чтобы избежать конфликтов. В противном случае, если аппаратные часы установлены на местное время, сразу несколько операционных систем могут попытаться скорректировать его, например, после перехода на летнее/зимнее время, что приведёт к избыточной коррекции; проблемы могут также возникнуть при перемещении между различными часовыми поясами и использовании одной из операционных систем для сброса системных/аппаратных часов.
Значение аппаратных часов можно прочитать и изменить с помощью команды timedatectl
.
Вы можете узнать текущий стандарт, который Arch использует для работы с аппаратными часами, с помощью следующей команды:
$ timedatectl | grep local
RTC in local TZ: no
Переход на использование местного времени для аппаратных часов:
# timedatectl set-local-rtc 1
Переход на использование UTC для аппаратных часов:
# timedatectl set-local-rtc 0
Эти команды автоматически обновят аппаратные часы и файл /etc/adjtime
, дополнительные действия не требуются.
Во время запуска ядра, в момент загрузки драйвера RTC, значение системных часов может быть установлено по аппаратным часам. Произойдет ли это, зависит от аппаратной платформы, версии ядра и опций сборки ядра. Если это происходит, то в этот момент последовательности загрузки время аппаратных часов принимается за UTC и значение /sys/class/rtc/rtcN/hctosys
(N=0,1,2,..) будет установлено в 1.
Позже systemd снова обновляет системное время по аппаратным часам, опираясь на значения в /etc/adjtime
. Следовательно, использование аппаратных часов с местным временем может привести к неожиданному поведению во время загрузки, например, системные часы могут перескочить назад по времени, что всегда является плохой идеей (это ещё не всё). Чтобы избежать этого, systemd будет синхронизироваться назад, только если аппаратные часы установлены в UTC, и не будет информировать ядро о локальном часовом поясе. Как следствие, временные метки на файловой системе FAT, которые изменены через Linux, будут в UTC.
Примечание:
- Использование
timedatectl
требует активной шины D-Bus. Поэтому использование этой команды под chroot (например, во время установки) может оказаться невозможным. В таких случаях можно вернуться к команде hwclock или использовать systemd-nspawn вместо chroot. - Если файл
/etc/adjtime
отсутствует, systemd по умолчанию считает, что аппаратные часы используют UTC.
UTC в Microsoft Windows
При двойной загрузке с Windows рекомендуется настроить Windows на использование UTC, а не настраивать Linux на использование местного времени. (По умолчанию Windows использует местное время [1].)
Это делается простым изменением в реестре: откройте regedit
и добавьте DWORD
ключ со значением 1
здесь:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTimeZoneInformationRealTimeIsUniversal
Это можно сделать одной командой в командной строке, запущенной от имени администратора:
reg add "HKEY_LOCAL_MACHINESystemCurrentControlSetControlTimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
Также можно создать *.reg
файл и импортировать его в реестр двойным щелчком мыши:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTimeZoneInformation] "RealTimeIsUniversal"=dword:00000001
Если Windows попросит обновить часы в связи с изменениями DST, позвольте ей это сделать. Часы останутся в UTC, как и ожидалось, скорректируется только отображаемое время.
После этого #Аппаратные часы и #Системные часы может понадобиться обновить.
Если у вас проблемы со смещением времени, попробуйте переустановить tzdata и заново установить часовой пояс:
# timedatectl set-timezone Europe/Moscow
Исторические примечания
В очень старых версиях Windows это всё не работает из-за их багов. Более конкретно,
- В 64-битных версиях Windows 7 и старых сборках Windows 10 существовала ошибка, из-за которой требовалось значение
QWORD
со значением1
вместоDWORD
. Эта ошибка была исправлена в новых сборках, и теперь работает толькоDWORD
. - До Vista SP2 существовала ошибка, которая сбрасывала часы на местное время после возвращения из ждущего или спящего режима.
- В XP и более старых версиях есть ошибка, связанная с переходом на летнее время. Подробнее: [2]
- Для еще более старых версий Windows лучше прочитать https://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html — тогда эта функциональность даже не была задокументирована и официально не поддерживалась.
Для этих операционных систем рекомендуется использовать местное время.
UTC в Ubuntu
Если Ubuntu на любом диске обнаруживает Windows в процессе установки, то для аппаратных часов она автоматически начинает использовать местное время. Очевидно, это сделано специально, чтобы позволить новым пользователям Linux опробовать Ubuntu на своих компьютерах с Windows без редактирования реестра.
Изменить это поведение можно так же, как описано выше.
Часовой пояс
Узнать текущий часовой пояс, установленный в системе:
$ timedatectl status
Просмотр списка доступных часовых поясов:
$ timedatectl list-timezones
Изменение часового пояса:
# timedatectl set-timezone Регион/Город
Например:
# timedatectl set-timezone Europe/Moscow
Эта команда создаст символическую ссылку /etc/localtime
, которая ведёт на соответствующий файл с информацией о зоне в /usr/share/zoneinfo/
. Если вам нужно создать её вручную (например, внутри chroot, где timedatectl
не работает), имейте в виду, что это должна быть именно символическая ссылка:
# ln -sf /usr/share/zoneinfo/Регион/Город /etc/localtime
Совет: Можно найти и выбрать нужный часовой пояс с помощью интерактивного помощника tzselect.
Смотрите timedatectl(1) и localtime(5) для более подробной информации.
Выбор на основе геолокации
Примечание: Некоторые среды рабочего стола поддерживают автоматический выбор часового пояса (например, смотрите GNOME (Русский)#Дата и время).
Чтобы автоматически выбрать часовой пояс на основе информации об IP-адресе, можно использовать какой-нибудь API геолокации для получения часового пояса (нпример curl https://ipapi.co/timezone
) и передать его вывод в команду timedatectl set-timezone
. Примеры бесплатных или частично бесплатных GeoIP API:
- Abstract IP geolocation API
- FreegeoIP
- IP-api
- IPAPI
- Ipdata
- Ipstack
- TimezoneApi
Обновление часового пояса после подключения к сети через NetworkManager
Создайте скрипт NetworkManager dispatcher:
/etc/NetworkManager/dispatcher.d/09-timezone
#!/bin/sh case "$2" in up) timedatectl set-timezone "$(curl --fail https://ipapi.co/timezone)" ;; esac
Также можно использовать tzupdateAUR для автоматического выбора часового пояса по IP-адресу. Сравнение наиболее популярных API IP-геолокации поможет выбрать подходящий вариант.
Погрешность часов
Нет ничего идеального. В том числе и часов. Время на любых часах хоть немного но отличается от реального. Одними из наиболее точных считаются атомные часы. Кварцевые часы, используемые в компьютерах, также не являются абсолютно точными, зато имеют относительно постоянную погрешность.
При установке аппаратных часов с помощью hwclock
рассчитывается новое значение дрейфа в секундах в день. Значение дрейфа вычисляется с помощью разницы между новым установленным значением и значением аппаратных часов непосредственно перед установкой, с учётом значения предыдущего значения дрейфа и времени последней установки аппаратных часов. Новое значение дрейфа и время, когда часы были установлены, записываются в файл /etc/adjtime
, перезаписывая предыдущие значения. Таким образом, аппаратные часы могут быть скорректированы с учётом дрейфа при выполнении команды hwclock --adjust
; это также происходит при выключении, но только если демон hwclock
включен, поэтому в Arch-системах, использующих systemd, этого не происходит.
Примечание: Если время аппаратных часов устанавливается повторно менее чем через 24 часа после предыдущей установки, дрейф не пересчитывается, поскольку hwclock
считает прошедший период времени слишком коротким для точного расчёта дрейфа.
Если аппаратные часы продолжают терять или набирать время с большим шагом, возможно, что был записан некорректный дрейф (но это применимо только в том случае, если запущен демон hwclock). Это может произойти, если вы неправильно установили время аппаратных часов или ваш стандарт времени не совпадает со стандартом времени в Windows или macOS. Значение дрейфа можно сбросить, сначала удалив файл /etc/adjtime
, а затем установив правильное время аппаратных и системных часов. Затем следует проверить правильность используемого стандарта времени.
Примечание: Если вы хотите использовать значение дрейфа, хранящееся в /etc/adjtime
, даже при использовании systemd (например, вы не можете или не хотите использовать NTP), вы должны регулярно вызывать hwclock --adjust
, например, создав задание cron.
Программные часы очень точны, но, как и большинство часов, не идеально точны и могут дрейфовать. Хотя и редко, системные часы могут потерять точность, если ядро пропускает прерывания. Существуют некоторые инструменты для повышения точности программных часов; смотрите #Синхронизация времени.
Синхронизация времени
Network Time Protocol (NTP) — это протокол для синхронизации часов компьютерных систем в сетях передачи данных с коммутацией пакетов и переменной задержкой. Ниже приведены реализации NTP, доступные для Arch Linux:
- Chrony — Клиент и сервер, дружественный к роумингу и разработанный специально для систем, которые не находятся в сети постоянно.
- https://chrony.tuxfamily.org/ || chrony
- ConnMan — Лёгкий сетевой менеджер с поддержкой NTP.
- https://01.org/connman (waybackmachine) || connman
- Network Time Protocol daemon — Эталонная реализация протокола, особенно рекомендуемая для использования на серверах времени. Она также может регулировать частоту прерываний и количество тиков в секунду для уменьшения дрейфа системных часов и будет вызывать повторную синхронизацию аппаратных часов каждые 11 минут.
- https://www.ntp.org/ || ntp
- ntpclient — Простой NTP-клиент с интерфейсом командной строки.
- http://doolittle.icarus.com/ntpclient/ || ntpclientAUR
- NTPsec — Форк NTPd, ориентированный на безопасность.
- https://ntpsec.org/ || ntpsecAUR
- OpenNTPD — Является частью проекта OpenBSD и реализует как клиент, так и сервер.
- https://www.openntpd.org/ || openntpd
- sntp — Клиент SNTP, который поставляется вместе с NTPd. Он заменяет ntpdate и рекомендуется в несерверных средах.
- https://www.ntp.org/ || ntp
- systemd-timesyncd — Простой демон SNTP, который реализует только клиентскую часть, фокусируясь только на запросе времени с одного удалённого сервера. Он должен быть более чем подходящим для большинства установок.
- https://www.freedesktop.org/wiki/Software/systemd/ || systemd
Настройки для пользователя/сессии или временные настройки
В некоторых случаях может быть полезно изменить настройки времени, не затрагивая глобальные системные значения. Например, для тестирования приложений, полагающихся на время во время разработки, или для настройки системного часового пояса при удалённом входе на сервер из другой зоны.
Чтобы заставить приложение «видеть» дату/время, отличное от системного, можно воспользоваться утилитой faketime(1) (из пакета libfaketime).
Если вы хотите, чтобы приложение «видело» часовой пояс, отличный от системного, установите переменную окружения TZ
, например:
$ date && export TZ=":/usr/share/zoneinfo/Pacific/Fiji" && date
Вт 01 ноя 2016 16:34:51 MSK Ср 02 ноя 2016 01:34:51 +12
Это отличается от простой установки времени, поскольку, например, позволяет протестировать поведение программы с положительными или отрицательными значениями смещения UTC, или влияние изменений летнего/зимнего времени при разработке на системах с часовым поясом, в котором нет переходов на летнее/зимнее время.
Другим вариантом использования является установка разных часовых поясов для разных пользователей одной системы: это можно сделать, установив переменную TZ
в конфигурационном файле оболочки; смотрите Переменные окружения#Установка переменных.
Советы и рекомендации
fake-hwclock
alarm-fake-hwclock разработан специально для систем без нормально работающих аппаратных часов. Он включает в себя службу systemd, которая при выключении сохраняет текущее время, а при следующем запуске восстанавливает сохранённое время, таким образом избегая странных ошибок путешествия во времени.
Установите пакет fake-hwclock-gitAUR, запустите и включите службу fake-hwclock.service
.
Решение проблем
Часы показывают значение, которое не является ни UTC, ни местным временем
Это может быть вызвано рядом причин. Например, если ваши аппаратные часы используют местное время, но timedatectl
настроен на то, чтобы считать, что они используют UTC, в результате смещение вашего часового пояса относительно UTC будет применено дважды, что приведёт к неправильным значениям местного времени и UTC.
Чтобы заставить ваши часы показывать правильное время, а также записать правильный UTC в ваши аппаратные часы, выполните следующие шаги:
- Настройте ntpd (включать его как службу не обязательно).
- Установите правильный часовой пояс.
- Запустите
ntpd -qg
для ручной синхронизации ваших часов с сетью, игнорируя большие отклонения между локальным UTC и сетевым UTC. - Запустите
hwclock --systohc
для записи текущего системного времени в аппаратные часы.
Смотрите также
- Linux Tips — Linux, Clocks, and Time
- An introduction to timekeeping in Linux VMs
- Источники данных, определяющие часовые пояса и переход на летнее время для пакета tzdata
- Time Scales
- Gentoo:System time
- Время (Википедия)
Оригинал:
«Set Time, Date Timezone in Linux from Command Line or Gnome | Use ntp»
Автор: Guillermo Garron
Дата публикации: 4 April 2012
Перевод: Н.Ромоданов
Дата перевода: апрель 2012 г.
В системе Linux очень важно иметь правильное время и дату, поскольку от этого зависит многое. Причем неважно, используете ли вы систему Linux на своем персональном компьютере или у вас Linux-сервер. Серверные и системные часы должны указывать правильное время.
Установка даты из командной строки
date +%Y%m%d -s "20120418"
Установка времени из командной строки
date +%T -s "11:14:00"
Установка времени и даты из командной строки
date -s "19 APR 2012 11:14:00"
Проверка в Linux даты из командной строки
date
Вы увидите что-то вроде следующего:
Thu Apr 19 15:17:34 BOT 2012
Установка аппаратных часов
Аппаратные часы — это те часы, которые работают на вашем компьютере даже тогда, как питание компьютера отключено. Это возможно благодаря наличию в современных компьютерах литиевой батареи или батареи другого типа в более старых компьютерах.
Мы можем увидеть различие между аппаратными и системными часами
hwclock --show
Вы увидите что-то вроде следующего:
Thu 19 Apr 2012 03:23:05 PM BOT -0.785086 seconds
Теперь проверьте системные часы
date
Вы увидите что-то вроде следующего:
Thu Apr 19 15:26:41 BOT 2012
Давайте установим аппаратные часы по местному времени:
hwclock --set --date="2012-04-19 16:45:05" --localtime
Если вы хотите установить их на использование времени по Гринвичу (UTC):
hwclock --set --date="2011-04-19 20:45:05" --utc
Установка часового пояса
Чтобы в ваших системных часах установить часовой пояс, выполните следующее:
cp /usr/share/zoneinfo/America/La_Paz /etc/localtime
Правильно укажите ваш часовой пояс.
Автоматическая регулировка часов
Для того, чтобы ваша система могла автоматический регулировать время, вам нужно установить программу ntp
. Получите ее из репозитария. После того, как она будет установлена, вы можете настроить ее следующим образом:
Отредактируйте файл /etc/ntpd.conf
. Он будет выглядеть следующим образом:
# С параметрами по умолчанию, устанавливаемыми ниже, программа ntpd будет выполнять синхронизацию ваших часов. # # Подробности смотрите: # - страница man для ntp.conf # - http://support.ntp.org/bin/view/Support/GettingStarted # - https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon # Используемые общедоступные сервера пулов NTP; смотрите http://www.pool.ntp.org/ server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org # Доступ на чтение только из localhost restrict default noquery nopeer restrict 127.0.0.1 restrict ::1 # Месторасположение файлов drift и log driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp.log # ЗАМЕЧАНИЕ: Если у вас работает программа dhcpcd и у вас указаны строки такие как 'restrict' и 'fudge', указываемые # здесь, удостоверьтесь, что в /etc/conf.d/net для перемннных dhcpcd_ethX добавлены параметры '-Y -N'
Удостоверьтесь, что вы запустили демон, и сделайте так, чтобы он автоматически запускался при загрузке системы.
Для Arch Linux это: /etc/rc.d/ntpd start
; для Debian и производных систем: /etc/init.d/ntpd start
Обновление из командной строки времени по значению, получаемому с сервера времени
Вы можете обновлять время вручную без использования демона ntpdate
ntpdate 129.6.15.28
Вы получите что-то вроде следующего:
19 Apr 15:45:23 ntpdate[10948]: step time server 129.6.15.28 offset -45.697084 sec
Бонус: Установка времени и даты в Gnome
Если вы используете Gnome, щелкните правой кнопкой мыши по
изображению часов и выберите пункт настройки adjust, или в меню
выберите пункт System > Administration > Time and Date (Система > Администрирование > Время и дата). Вам, возможно, будет предложено ввести пароль.
Вы увидите окно, похожее на следующее:
Или
Если вам понравилась статья, поделитесь ею с друзьями:
|
Needs Updating |
Contents
-
Ubuntu Time Management
-
Changing the Time Zone
- Using the GUI
- Using the Command Line (terminal)
- Using the Command Line (unattended)
-
Time Synchronization using NTP
- Using the GUI
- Command Line ntpd
-
Changing NTP Time Servers
- Using the GUI
- ntpd
- Command Line ntpdate
- ntpdate
-
Multiple Boot Systems Time Conflicts
-
Make Windows use UTC
- Reversing the change
-
Make Linux use ‘Local’ time
- Pre-Ubuntu 15.04 systems (e.g. Ubuntu 14.04 LTS):
- Ubuntu 15.04 systems and above (e.g. Ubuntu 16.04 LTS):
-
Make Windows use UTC
-
Troubleshooting
- Is NTP installed?
-
Which configuration file is it using?
- How do I configure NTP to use DHCP
- Is NTP running?
- Which servers are you using?
- Can these servers be resolved?
- Can these servers be reached?
- What’s NTP up to?
- Why does NTP keep resetting/failing?
-
Changing the Time Zone
Ubuntu Time Management
This page gives useful information about the way that Ubuntu manages time by changing the timezone, setting up synchronization using Network Time Protocol (NTP), and adjusting servers.
Changing the Time Zone
This section shows you how to accomplish this task using either the Graphical User Interface (GUI) or by using the command line (terminal).
Using the GUI
Perhaps the most user friendly way to change the time zone of your Ubuntu system is to use the Graphical User Interface (GUI).
-
Click on the System menu on the top panel, go into the Administration sub-menu, and click on Time and Date.
- Click on the currently selected time zone to bring up the selection map.
-
- Click in the general area of your location on the time zone map, the map will zoom in.
-
-
Select the closest city then choose Close
-
Using the Command Line (terminal)
Using the command line, you can use sudo dpkg-reconfigure tzdata.
-
Open a terminal window by going to Applications>Accessories>Terminal
-
sudo dpkg-reconfigure tzdata
- Follow the directions in the terminal.
-
The timezone info is saved in /etc/timezone — which can be edited or used below
Using the Command Line (unattended)
- Find out the long description for the timezone you want to configure.
-
Save this name to /etc/timezone
-
run sudo dpkg-reconfigure —frontend noninteractive tzdata:
$ echo "Australia/Adelaide" | sudo tee /etc/timezone Australia/Adelaide $ sudo dpkg-reconfigure --frontend noninteractive tzdata Current default time zone: 'Australia/Adelaide' Local time is now: Sat May 8 21:19:24 CST 2010. Universal Time is now: Sat May 8 11:49:24 UTC 2010.
This can be scripted if required.
Time Synchronization using NTP
This page describes methods for automatically keeping your computer’s time accurate. This is extremely useful for servers, and is also recommended for desktop machines.
Network Time Protocol (NTP) is a UDP/IP protocol for synchronizing time over a network connection. Basically a client requests the current time from a server, and then uses the servers response to set its own clock.
Beyond this simple description, there is a lot of complexity. There are multiple tiers of NTP servers, with the tier one NTP servers connected to atomic clocks (often via GPS), and tier two and three servers spreading the load of actually handling requests across the internet. The client software is a lot more complex than you might think as it has to factor communication delays, and adjust the time in a way that does not affect the other processes that run on the system. Luckily all that complexity is hidden from the user.
Using the GUI
This is how to enable NTP time synchronization using the GUI (Graphical User Interface).
-
Click on the System menu on the top panel, go into the Administration sub-menu, and click on Date and Time.
-
Select the configuration option Keep synchronized with Internet servers
-
- You may get a dialog box informing you that NTP support has to be installed.
-
-
After selecting Install NTP Support it will download the needed files.
-
-
You are now finished and you can click Close or you can customize the NTP servers (default is ntp.ubuntu.com) that your computer uses to synchronize with by choosing Select Servers.
-
Command Line ntpd
ntpdate is a bit of a blunt instrument as it can only adjust the time once a day in one big correction. The ntp daemon ntpd is far more subtle as it calculates the drift of your system clock and continuously adjusts it in small increments. Using ntpd there are no large corrections that could lead to inconsistent logs for instance. The cost is a little processing power and memory, but for a modern system this is negligible.
To setup ntpd in versions of Ubuntu 7.04 and higher
sudo apt-get install ntp
To set up ntpd pre Ubuntu 7.04:
sudo apt-get install ntp-simple
Changing NTP Time Servers
In both cases above, your system will use Ubuntu’s NTP server at ntp.ubuntu.com by default. This is OK, but you might want to use several servers to increase accuracy and resilience, and you may want to use time servers that are geographically closer to you.
Using the GUI
-
Click on the System menu on the top panel, go into the Administration sub-menu, and click on Date and Time.
- You may have to enter your password to continue.
-
-
Select Configure Servers
-
- Enable the box next to your choice of server(s) or add your own.
-
ntpd
-
Change the contents of /etc/ntp.conf to include additional server lines:
server ntp.ubuntu.com server pool.ntp.org
Command Line ntpdate
ntpdate is no longer installed by default on Ubuntu. The file /etc/cron.daily/ntpdate also does not exist anymore
ntpdate, if installed, will run it once at boot time to set up your time according to Ubuntu’s NTP server. However, a system’s clock is likely to drift considerably between reboots if the time between reboots is long. In that case it makes sense to correct the time occasionally. The easiest way to do this is to get cron to run it every day. With your favorite editor, create (needs sudo) a file /etc/cron.daily/ntpdate containing:
#!/bin/sh ntpdate ntp.ubuntu.com
Make sure that you make this new file executable:
sudo chmod 755 /etc/cron.daily/ntpdate
ntpdate
-
Change the contents of /etc/cron.daily/ntpdate to add the pooled ntp servers:
ntpdate ntp.ubuntu.com pool.ntp.org
You may notice pool.ntp.org in the examples above. This is a really good idea which uses round-robin DNS to return an NTP server from a pool, spreading the load between several different servers. Even better, they have pools for different regions — I am in New Zealand, so I use nz.pool.ntp.org instead of pool.ntp.org. Look at http://www.pool.ntp.org/ for more details.
You can also Google for NTP servers in your region, and add these to your configuration. To test that a server works, just type sudo ntpdate ntp.server.name and see what happens.
Multiple Boot Systems Time Conflicts
Operating systems store and retrieve the time in the hardware clock located on your motherboard so that it can keep track of the time even when the system does not have power. Most operating systems (Linux/Unix/Mac) store the time on the hardware clock as UTC by default, though some systems (notably Microsoft Windows) store the time on the hardware clock as the ‘local’ time. This causes problems in a dual boot system if both systems view the hardware clock differently.
The advantage of having the hardware clock as UTC is that you don’t need to change the hardware clock when moving between timezones or when Daylight Savings Time (DST) begins or ends as UTC does not have DST or timezone offsets.
Changing Linux to use local time is easier and more reliable than changing Windows to use UTC, so dual-boot Linux/Windows systems tend to use local time.
Since Intrepid (8.10), UTC=yes is default.
Make Windows use UTC
Note: This method was not initially supported on Windows Vista and Server 2008, but came back with Vista SP2, Windows 7, Server 2008 R2 and Windows 8/8.1.
To make MS Windows calculate the time from the hardware clock as UTC.
-
Create a file named WindowsTimeFixUTC.reg with the following contents and then double click on it to merge the contents with the registry:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTimeZoneInformation] "RealTimeIsUniversal"=dword:00000001
Note: Windows Time service will still write local time to the RTC regardless of the registry setting above on shutdown, so it is handy to disable Windows Time service with this command (if time sync is still required while in Windows use any third-party time sync solution):
sc config w32time start= disabled
Reversing the change
You can create a file with the following contents and then double-click it to merge in the original changes, as above:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTimeZoneInformation] "RealTimeIsUniversal"=-
If Windows Time service was disabled, enable it again with the command:
sc config w32time start= demand
Make Linux use ‘Local’ time
To tell your Ubuntu system that the hardware clock is set to ‘local’ time:
Pre-Ubuntu 15.04 systems (e.g. Ubuntu 14.04 LTS):
- edit /etc/default/rcS
- add or change the following section
# Set UTC=yes if your hardware clock is set to UTC (GMT) UTC=no
Ubuntu 15.04 systems and above (e.g. Ubuntu 16.04 LTS):
- open a terminal and execute the following command
timedatectl set-local-rtc 1
Troubleshooting
Is NTP installed?
Run dpkg-query —list ntp* and look for ntp-simple (pre 7.04) or ntp. The ntpdate and ntp-doc packages may also be useful.
Which configuration file is it using?
By default NTP uses /etc/ntp.conf. If /etc/ntp.conf.dhcp exists then the NTP daemon assumes you’re using DHCP to redefine the NTP settings and it uses that file instead.
How do I configure NTP to use DHCP
Your DHCP server must be configured to supply NTP servers (man dhcpd.conf may be helpful).
Your client must be configured to use the supplied NTP servers. To do this, add ntp-servers to the request (or even require) line in /etc/dhcp3/dhclient.conf. You may wish to use the default and prepend features as well to provide default/additional NTP servers. Please see man dhclient.conf and man dhcp-options for details.
Is NTP running?
NTP most commonly ‘fails’ if it cannot resolve the servers in its configuration file at startup (this can happen if DNS isn’t available during boot). Also, if NTP is unable to keep the local clock reasonably accurate it gives up and terminates (see below).
Try sudo /etc/init.d/ntp status to check if NTP is running, and sudo /etc/init.d/ntp restart to restart it if necessary.
I have various systems on unreliable networks so I use a simple script to bounce NTP if needed:
$ cat /etc/cron.hourly/BOUNCE-NTP #!/bin/sh /usr/bin/ntpq -np | /bin/grep '^*' > /dev/null || ( /usr/bin/ntpq -np ; /etc/init.d/ntp restart )
Which servers are you using?
Run grep ^server /etc/ntp.conf or grep ^server /etc/ntp.conf.dhcp to figure out which servers you’re trying to use
If your network or ISP have an NTP server they should be listed here. Failing that, try ntp.ubuntu.com and/or the NTP pool servers (http://www.pool.ntp.org/). 3 or 4 servers is plenty, and don’t use a server without permission (see http://en.wikipedia.org/wiki/NTP_vandalism).
Can these servers be resolved?
If host $servername fails then you may have DNS issues that need to be fixed ($servername is the name of a server listed in your configuration file, see above).
Can these servers be reached?
If ntptrace $servername fails then you may have routing/firewall issues that need to be fixed ($servername is the name of a server listed in your configuration file, see above). NTP uses UDP port 123, make sure these packets can are properly NAT-ed through your gateway if necessary.
What’s NTP up to?
ntpq —numeric —peers
—numeric removes the DNS lookups. You can leave it off, but don’t be surprised if the resolved names don’t match names in the ntp.conf file.
Ideally you want a * and a few +’s in the fist column and a reach of 377 (see http://www.ntp.org/ntpfaq/NTP-s-trouble.htm#Q-MON-REACH)
delay is in milliseconds. It should be < 1 for local network servers, < 10 for ISP servers over DSL and ideally < 100 for wireless. offset is in milliseconds and is the current best guess of the time difference between your system and the server. The smaller the better! jitter is an estimate the the local clock frequency error. The smaller the better. If it’s consistently high then your system may be drifting (see below)
Why does NTP keep resetting/failing?
NTP attempts to fix your local clock to keep accurate time. If your local clock drifts too fast (usually HW problems or IRQ lockups or somesuch) then NTP either keeps resetting your clock or gives up and terminates. Fix the drift problem and NTP will behave.
Время является важным аспектом в системах Linux, особенно в критически важных службах, таких как задания cron.
Наличие правильного времени на сервере гарантирует, что сервер работает в здоровой среде, которая состоит из распределенных систем и поддерживает точность на рабочем месте.
В этой статье мы сконцентрируемся на том, как установить время / дату / часовой пояс и синхронизировать часы сервера с вашим компьютером с Ubuntu Linux.
Проверьте текущее время
Вы можете проверить текущее время и дату, используя команду date и timedatectl.
Эти команды могут быть выполнены прямо из терминала от обычного пользователя или от суперпользователя.
Команды удобны, полезность двух команд ощутима, когда вы хотите исправить неправильное время из командной строки.
Использование команды date
Войдите в систему как пользователь root и используйте команду следующим образом:
$ date
Вывод:
Вт фев 5 15:16:04 MSK 2019
Вы также можете использовать ту же команду, чтобы проверить дату 2 дня назад
$ date --date="2 days ago"
Использование команды timedatectl
Для проверки состояния времени в вашей системе, а также текущих настроек времени, используйте команду timedatectl, как показано далее:
# timedatectl
или
# timedatectl status
Изменение времени
Мы используем timedatectl для изменения системного времени в формате HH: ММ: ss.
HH обозначает час в 24-часовом формате, MM обозначает минуты, а SS – секунды.
Для установки времени на 09:08:07 используйте команду следующим образом (используя timedatectl)
# timedatectl set-time 09:08:07
Используя команду date
Изменение времени означает, что все системные процессы выполняются в одно и то же время, при этом рабочий стол и сервер работают одновременно.
Из командной строки используйте команду date следующим образом:
# date +%T -s "10:13:13"
Где,
• 10: час (hh)
• 13: минута (мм)
• 13: Второй (ss)
Чтобы изменить локаль на AM или PM, используйте %p в следующем формате.
# date +%T%p -s "6:10:30AM"
# date +%T%p -s "12:10:30PM"
Изменение даты
Как правило, вы хотите, чтобы ваша системная дата и время устанавливались автоматически.
Если по какой-либо причине вам необходимо изменить его вручную с помощью команды date, мы можем использовать эту команду:
# date –set=”20140125 09:17:00”
Он установит текущую дату и время вашей системы на «25 января 2014 года» и «09: 17: 00 AM».
Обратите внимание, что для этого у вас должна быть привилегия root.
Вы можете использовать timedatectl, чтобы установить время и дату соответственно.
Допустимый формат: ГГГГ-ММ-ДД, ГГГГ представляет год, ММ – месяц в двух цифрах, а ДД – день в двух цифрах.
Чтобы изменить дату на 15 января 2019 года, вы должны использовать следующую команду
# timedatectl set-time 20190115
Создать пользовательский формат даты
Чтобы создать собственный формат даты, используйте знак плюс (+)
$ date +”Day : %d Month : %m Year : %Y”
Day: 05 Month: 12 Year: 2013
$ date +%D
12/05/13
Формат %D соответствует формату год / месяц / день.
Вы также можете указать название дня, если хотите.
Вот некоторые примеры :
$ date +”%a %b %d %y”
Fri 06 Dec 2013
$ date +”%A %B %d %Y”
Friday December 06 2013
$ date +”%A %B %d %Y %T”
Friday December 06 2013 00:30:37
$ date +”%A %B-%d-%Y %c”
Friday December-06-2013 12:30:37 AM WIB
Отобразить список / изменить часовые пояса
Изменение часового пояса имеет решающее значение, если вы хотите, чтобы все синхронизировалось с сетевым протоколом времени.
Первое, что нужно сделать, это составить список всех часовых поясов региона, используя опцию list-часовой пояс или grep, чтобы упростить понимание команды:
# timedatectl list-timezones
Приведенная выше команда представит прокручиваемый формат.
Рекомендуемый часовой пояс для серверов – UTC, поскольку он не имеет летнего времени.
Если вы знаете, определенные часовые пояса установите его, используя имя с помощью следующей команды
# timedatectl set-timezone America/Los_Angeles
Для отображения часового пояса выполните:
# timedatectl | grep "Time"
Установите Local-RTK
Часы реального времени (RTC), которые также называются аппаратными часами, не зависят от операционной системы и продолжают работать, даже когда сервер выключен.
Используйте следующую команду:
# timedatectl set-local-rtc 0
Кроме того, следующая команда для местного времени
# timedatectl set-local-rtc 1
Проверить / изменить время CMOS
Аккумулятор CMOS компьютера автоматически синхронизирует время с системными часами, если CMOS работает правильно.
Используйте команду hwclock, чтобы проверить дату CMOS следующим образом
# hwclock
Для синхронизации даты CMOS с системной датой используйте следующий формат
# hwclock –systohc
Правильное время для вашей среды Linux очень важно, потому что от этого зависят многие операции.
Такие операции включают в себя регистрацию событий и cron jobs.
Также, это важно для работы в домене.
Мы надеемся, что вы нашли эту статью полезной.
Установка времени в Linux является очень простым. У вас есть несколько вариантов того, как установить дату, время и часовой пояс в окне Linux. Мы расскажем про самый удобный способ.
Думаю, вы уже догадались что речь идет о «Терминале«, который является максимально универсальным инструментом.
Как установить дату, время и часовой пояс в окне Linux/Unix мы сейчас вам расскажем.
Время Unix или время POSIX, которое является системой для описания точек во времени — это количество секунд, прошедших с полуночи UTC утром 1 января 1970 года.
Кстати, мы уже писали о том как можно поменять язык системы. Рекомендуем ознакомиться, может быть очень полезной информацией.
Содержание
- Установка времени в Linux
- Установите время в Linux
- Установка даты и времени в Linux
- Установить часовой пояс Linux
- Некоторые связанные с этим утилиты
- Выводы
Установка времени в Linux
Количество прошедших секунд может быть получено этой командой в системах Linux / Unix:
$ date +%s
Установка даты в Linux
Дата Linux может быть установлена с использованием следующего синтаксиса:
# date +%Y%m%d -s «yyyymmdd»
yyyy — год, мм — месяц, а dd — день.
Например, мы можем установить дату до 22 июня 2090 года:
# date +%Y%m%d -s «20900622»
Установите время в Linux
Время Linux можно установить с помощью следующего синтаксиса:
# date +%T -s «hh:mm:ss»
hh — час, mm — minite и ss — второй.
Например, мы можем установить время до 12:28:
# date +%T -s "12:28:00"
Установка даты и времени в Linux
Дата и время могут быть установлены командой даты одновременно:
Первый mm означает месяц, а второй mm — время.
Например, мы можем установить дату и время до 11:28 22 июня 2090 года:
Другой способ установить новую дату и время — использовать следующий синтаксис:
# date —set=«STRING»
Способ установки даты и времени:
# date -s «22 JUN 2017 11:28:00»
или
# date —set=«22 JUN 2017 11:28:00»
Установить часовой пояс Linux
Конфигурационный файл для часового пояса обычно используется / etc / localtime, который часто является символической ссылкой на локальное время файла или на правильный файл часового пояса в системе. Каталог часового пояса: / usr / share / zoneinfo, где вы можете найти список регионов часовых поясов. В некоторых дистрибутивах, таких как Fedora / RHEL / Cent OS, файлы зон используют формат / usr / share / zoneinfo / REGION / CITY.
Метод установки часового пояса Linux:
При необходимости обновлять информацию о часовом поясе
# mv /etc/localtime /etc/localtime.bak
Найдите соответствующий часовой пояс из / etc / localtime и создайте для него символическую ссылку
Например, мы хотим установить часовой пояс в Гонконге:
Проверка изменения часового пояса
$ date
Вы можете получить такой вывод:
$ date
Вт Июн 22 12:33:10 HKT 2017
Некоторые связанные с этим утилиты
Вот некоторые связанные с ним утилиты времени и времени Linux.
Обновление текущего системного времени по rdate
# rdate -s time.nist.gov
Список доступных серверов времени, пожалуйста, отметьте NIST Internet Time Servers.
Установите аппаратные часы
У Fedora / RHEL / CentOS есть инструмент установки даты / времени
Вы можете использовать GUI-инструмент в дистрибутивах Red Hat:
# system-config-date
Или попробуйте:
и затем выберите запись в часовом поясе.
Выводы
Надеемся, что для вас установка времени в Linux была понятной и быстрой даже как и для новичка. Если у вас есть дополнительные вопросы по этой теме, то не стесняйтесь задавать их в форму комментариев. Мы обязательно поможем вам в вопросах касающихся этой темы и подскажем, что делать еще более подробно.
Также, не забывайте делится мнением о руководстве на своих страницах в Facebook, Google+, Twitter, ВКонтакте или Одноклассники. Мы будем очень признательным вам за это.