
Повечето хора следят за времето. Ставаме навреме, за да изпълним утринните си ритуали и да отидем на работа, да направим обедна почивка, да се справим в крайните срокове на проектите, да отбележим рождени дни и празници, да се качим на самолет и така нататък.
Освен това: някои от нас са обсебени от времето. Часовниците ми получават захранване от слънчева енергия и точен час от Националния институт за стандарти и технологии () в Форт Колинс (щата Колорадо) чрез дълговълнова радиостанция . Сигналите за време се синхронизират с атомни часовници, също разположени в Форт Колинс. Моят Fitbit се синхронизира с телефона ми, който след това се синхронизира със сървър , който в крайна сметка се синхронизира с атомните часовници.
Устройствата също следят времето
Има много причини, поради които устройствата и компютрите ни трябва точно време. Например, в банковия сектор, на фондовите пазари и в други финансови организации транзакциите трябва да се извършват в правилния ред и точните времеви последователности са от критично значение.
Нашите телефони, таблети, автомобили, GPS системи и компютри изискват прецизно настройване на времето и датата. Искам часовниците на работния плот на компютъра ми да показват правилното време. Искам напомнянията в локалния календар да се появяват в точното време. Правилното време също гарантира, че cron задачите и systemd стартират в нужното време.
Дата и време също са важни за воденето на журнали, така че е малко по-лесно да се намерят определени логове, разчитайки на датата и часа. Например, веднъж работех в DevOps (тогава не го наричаха така) и настройвах система за електронна поща в щата Северна Каролина. Преди обработвахме повече от 20 милиона писма на ден. Проследяването на електронната поща през серия от сървъри или определянето на точната последователност на събитията с помощта на лог файлове на географски разпръснати хостове може да бъде много по-лесно, ако съответните компютри са синхронизирани по време.
Времето е едно — часовниците са много
Linux хостовете трябва да вземат предвид, че съществува системно време и време RTC. RTC (Real Time Clock — часовник за реално време) е малко странно и не особено точно наименование за хардуерни часовници.
Хардуерните часовници работят непрекъснато, дори когато компютърът е изключен, използвайки батерия на дънната платка на системата. Основната функция на RTC е да съхранява времето, когато връзката със сървъра за време не е налична. В онези времена, когато не е било възможно да се свържете със сървър за време чрез интернет, всеки компютър трябваше да има точни вътрешни часовници. Операционните системи трябваше да се обръщат към RTC по време на зареждане, а потребителят трябваше ръчно да настрои системното време, използвайки хардуерния интерфейс за конфигурация на BIOS, за да се увери, че е правилно.
Хардуерните часовници не разбират концепцията за часови зони; в RTC се съхранява само времето, а не часовата зона или отклонението от UTC (Всемирно координирано време, известно още като GMT или средно време по Гринвич). Можете да настроите RTC с помощта на инструмент, за който ще говоря по-късно в тази статия.
Системното време е времето, което операционната система показва на часовника в GUI на вашия работен плот, в изхода на командата date, в печатите на журналите. Това се отнася и за времето на създаване, промяна и отваряне на файлове.
На страницата има пълно описание на RTC и системните часовници.
Какво става с NTP?
Компютрите по целия свят използват NTP (Network Time Protocol) за синхронизиране на времето си с еталонните часовници чрез интернет с помощта на йерархия от NTP сървъри. Основните сървъри за време са на ниво 1 и са директно свързани с различни национални служби за време на ниво 0 чрез спътник, радио или дори модеми по телефонни линии. Услугите за време на ниво 0 могат да бъдат атомни часовници, радио приемник, настроен на сигнали, предавани от атомни часовници, или GPS приемник, използващ високоточни сигнали от часовници, предавани от спътниците на GPS.
На повечето еталонни сървъри са налични хиляди публични NTP стратум 2 сървъри, достъпни за всички. Много организации и потребители (включително мен) с множество хостове, които се нуждаят от NTP сървър, предпочитат да инсталират свои собствени времеви сървъри, така че само един локален хост да се свързва с стратум 2 или 3. След това те конфигурират останалите възли в мрежата да използват локалния времеви сървър. В моя случай в домашната мрежа това е сървър от трето ниво.
Различни реализации на NTP
Първоначалната реализация на NTP е ntpd. След това към нея се присъединиха две по-нови, chronyd и systemd-timesyncd. Всички три синхронизират времето на локалния хост със сървър за време NTP. Услугата systemd-timesyncd не е толкова надеждна, колкото chronyd, но е достатъчна за повечето цели. Ако RTC не е синхронизирана, тя може постепенно да коригира системното време, за да се синхронизира с NTP сървъра, когато локалното системно време е малко изместено. Услугата systemd-timesync не може да се използва като времеви сървър.
— това е реализация на NTP, която съдържа две програми: демон chronyd и команден интерфейс с име chronyc. Chrony предлага някои функции, които в много случаи са просто незаменими:
- Chrony може да се синхронизира с времеви сървър много по-бързо от старата услуга ntpd. Това е полезно за лаптопи или настолни компютри, които не работят постоянно.
- Той може да компенсира колебания в тактовите честоти, например, когато хостът преминава в режим на сън или излиза от него, или когато тактовата честота се променя поради рязка промяна в честотата, която забавя тактовите честоти при ниски натоварвания.
- Той решава проблемите с времето, свързани с нестабилна мрежова връзка или претоварване на мрежата.
- Той регулира закъсненията в мрежата.
- След първоначалната времева синхронизация, Chrony никога не спира часовниците. Това осигурява стабилни и последователни времеви интервали за много системни услуги и приложения.
- Chrony може да работи дори без свързаност с мрежата. В такъв случай локалният хост или сървър може да бъде актуализиран ръчно.
- Chrony може да действа като NTP сървър.
Още веднъж: NTP — протокол, който може да бъде реализиран на Linux хост с използване на Chrony или systemd-timesyncd.
RPM пакетите NTP, Chrony и systemd-timesyncd са налични в стандартните репозитории на Fedora. RPM systemd-udev е мениджър на ядрени събития, който по подразбиране е инсталиран в Fedora, но не е задължителен за употреба.
Можете да инсталирате всичките три и да превключвате между тях, но това ще създаде излишно главоболие. Така че по-добре не го правете. Съвременните версии на Fedora, CentOS и RHEL преминаха на Chrony като стандартна реализация и освен това имат systemd-timesyncd. Считам, че Chrony работи добре, осигурява по-добър интерфейс от NTP услугата, предоставя значително повече информация и повишава контрола, което безусловно ще се хареса на системните администратори.
Деактивиране на NTP услуги
Възможно е на вашия хост вече да е стартирана NTP услуга. Ако е така, трябва да я деактивирате преди да преминете към нещо друго. Аз имах стартиран chronyd, затова използвах следните команди, за да го спра и деактивирам. Стартирайте съответните команди за всякакъв NTP демон, който използвате на своя хост:
[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Премахнато
/etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#Проверете, че службата е спряна и деактивирана:
[root@testvm1 ~]# systemctl status chronyd
● chronyd.service - NTP клиент/сървър
Заредено: заредено (/usr/lib/systemd/system/chronyd.service; деактивирано; настройка на доставчика: активирано)
Активно: неактивно (мъртво)
Документация: man:chronyd(8)
man:chrony.conf(5)
[root@testvm1 ~]#Проверка на статуса преди стартиране
Системният статус на синхронизация на часовника позволява да се определи дали NTP услугата е стартирана. Тъй като все още не сте стартирали NTP, командата timesync-status ще намекне за това:
[root@testvm1 ~]# timedatectl timesync-status
Неуспешно запитване на сървъра: Не може да се активира отдалечен връстник.Пряк запитване за статуса предоставя важна информация. Например, командата timedatectl без аргументи или параметри изпълнява подкоманда status по подразбиране:
[root@testvm1 ~]# timedatectl status
Локално време: Пет 2020-05-15 08:43:10 EDT
Универсално време: Пет 2020-05-15 12:43:10 UTC
RTC време: Пет 2020-05-15 08:43:08
Часова зона: Америка/Ню Йорк (EDT, -0400)
Часовникът на системата синхронизиран: не
NTP услуга: неактивна
RTC в локална TZ: да
Предупреждение: Системата е конфигурирана да чете RTC времето в локалната часова зона.
Този режим не може да бъде напълно поддържан. Ще доведе до различни проблеми
с промени в часовите зони и корекции за лятно часово време. Времето на RTC
никога не се актуализира, разчита на външни средства за поддържането му.
Ако е възможно, използвайте RTC в UTC, като извикате
'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#Така ще получите местното време за вашия хост, време UTC и време RTC. В този случай системното време е настроено на часова зона Америка/Ню Йорк (TZ), RTC е настроено на време в местната часова зона, а NTP услугата не е активна. Времето на RTC започва да се разминава с времето на системата. Това е нормално за системи, чиито часовници не са били синхронизирани. Размерът на отклонението на хоста зависи от времето, изминало от последната синхронизация на системата.
Също така получихме предупреждение относно използването на локално време за RTC — това важи за промените в часовите зони и настройките за лятно часово време. Ако компютърът е изключен в момента, когато трябва да се извършат промени, времето на RTC няма да се промени. Но за сървъри или други хостове, които работят денонощно, това изобщо не е проблем. Освен това всяка услуга, която осигурява синхронизация на време NTP, ще коригира времето на хоста още в началния етап на стартиране, така че след завършване на стартирането времето отново ще бъде правилно.
Настройка на часовата зона
Обикновено указвате часова зона по време на инсталационната процедура и нямате задача да я променяте по-късно. Въпреки това, има случаи, когато е необходимо да промените часовата зона. Има няколко инструмента, които могат да помогнат. За определяне на местната часова зона хостът Linux използва файлове на часовите зони. Тези файлове се намират в директорията /usr/share/zoneinfo. По подразбиране за моята часова зона системата записва следното: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. Но не е нужно да знаете такива подробности, за да промените часовата зона.
Главното е да знаете официалното име на часовата зона за вашето местоположение и съответната команда. Да кажем, че искате да промените часовата зона на Лос Анджелис:
[root@testvm2 ~]# timedatectl list-timezones | column
America/La_Paz Europe/Budapest
America/Lima Europe/Chisinau
America/Los_Angeles Europe/Copenhagen
America/Maceio Europe/Dublin
America/Managua Europe/Gibraltar
America/Manaus Europe/HelsinkiСега можете да зададете часова зона. Използвах командата date, за да проверя промените, но можете да използвате и timedatectl:
[root@testvm2 ~]# date
Tue 19 May 2020 04:47:49 PM EDT
[root@testvm2 ~]# timedatectl set-timezone America/Los_Angeles
[root@testvm2 ~]# date
Tue 19 May 2020 01:48:23 PM PDT
[root@testvm2 ~]#Сега отново можете да промените часовата зона на вашия хост на местно време.
systemd-timesyncd
Демонът systemd timesync предоставя реализация на NTP, която е лесна за управление в контекста на systemd. Той е инсталиран по подразбиране в Fedora и Ubuntu. Въпреки това, той се стартира по подразбиране само в Ubuntu. Не съм сигурен за другите дистрибуции. Можете да проверите сами:
[root@testvm1 ~]# systemctl status systemd-timesyncdКонфигуриране на systemd-timesyncd
Файлът за конфигурация за systemd-timesyncd е /etc/systemd/timesyncd.conf. Това е прост файл с по-малко включени опции в сравнение със старите услуги NTP и chronyd. Ето съдържанието на този файл (без допълнителни промени) на моята виртуална машина с Fedora:
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.
[Time]
#NTP=
#FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org 2.fedora.pool.ntp.org 3.fedora.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048Единственият раздел, който съдържа, освен коментарите, е [Time]. Всички останали редове са коментирани. Това са стойностите по подразбиране, те не трябва да се променят (освен ако нямате причина за това). Ако нямате NTP сървър, указан в реда NTP =, по подразбиране в Fedora се използва резервен времеви сървър на Fedora. Обикновено добавям своя времеви сървър:
NTP=myntpserverСтартиране на timesync
Можете да стартирате и да активирате systemd-timesyncd по следния начин:
[root@testvm2 ~]# systemctl enable systemd-timesyncd.service
Created symlink /etc/systemd/system/dbus-org.freedesktop.timesync1.service → /usr/lib/systemd/system/systemd-timesyncd.service.
Created symlink /etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service → /usr/lib/systemd/system/systemd-timesyncd.service.
[root@testvm2 ~]# systemctl start systemd-timesyncd.service
[root@testvm2 ~]#Настройване на хардуерните часовници
Ето как изглежда ситуацията след стартиране на timesyncd:
[root@testvm2 systemd]# timedatectl
Local time: Sat 2020-05-16 14:34:54 EDT
Universal time: Sat 2020-05-16 18:34:54 UTC
RTC time: Sat 2020-05-16 14:34:53
Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no Първоначално разликата между RTC и местното време (EDT) не надвишава секунда, а отклонението нараства с още няколко секунди през следващите дни. Понеже в RTC няма концепция за часови зони, командата timedatectl трябва да направи сравнение, за да определи необходимата часова зона. Ако времето в RTC не съвпада точно с местното време, то значи, че не съвпада и с местната часова зона.
В търсене на допълнителна информация проверих състоянието на systemd-timesync и открих следното:
[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Синхронизация на мрежовото време
Loaded: loaded (\/usr\/lib\/systemd\/system\/systemd-timesyncd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-05-16 13:56:53 EDT; 18h ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 822 (systemd-timesyn)
Status: "Първоначална синхронизация с времевия сървър 163.237.218.19:123 (2.fedora.pool.ntp.org)."
Tasks: 2 (limit: 10365)
Memory: 2.8M
CPU: 476ms
CGroup: \/system.slice\/systemd-timesyncd.service
└─822 \/usr\/lib\/systemd\/systemd-timesyncd
May 16 09:57:24 testvm2.both.org systemd[1]: Starting Network Time Synchronization...
May 16 09:57:24 testvm2.both.org systemd-timesyncd[822]: Часът на системния часовник не е зададен или е нулиран, възстановяване от записаната времева маркировка: Sat 2020-05-16 13:56:53 EDT
May 16 13:56:53 testvm2.both.org systemd[1]: Началото на мрежовата синхронизация на времето.
May 16 13:57:56 testvm2.both.org systemd-timesyncd[822]: Първоначална синхронизация с времевия сървър 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#Обърнете внимание на съобщението в логовете, което казва, че системното време не е зададено или е нулирано назад. Услугата Timesync задава системното време на база времевата маркировка. Времевите маркировки се поддържат от демона timesync и се създават при всяка успешна синхронизация.
Командата timedatectl няма възможност да вземе стойността на апаратните часовници от системните часовници. Тя може да зададе време и дата само от стойността, въведена в командния ред. Можете да настроите RTC на същата стойност, каквато е системното време, като използвате командата hwclock:
[root@testvm2 ~]# \/sbin\/hwclock --systohc --localtime
[root@testvm2 ~]# timedatectl
Local time: Mon 2020-05-18 13:56:46 EDT
Universal time: Mon 2020-05-18 17:56:46 UTC
RTC time: Mon 2020-05-18 13:56:46
Time zone: America\/New_York (EDT, -0400)
System clock synchronized: yes
NTP service: active
RTC in local TZ: yesОпцията --localtime означава, че апаратните часовници показват местно време, а не UTC.
Защо изобщо ви е необходим RTC?
Всяка реализация на NTP ще настрои системните часове при стартиране. Защо тогава RTC? Не е съвсем така: това ще се случи само ако имате мрежова връзка със сървър на време. Въпреки това много системи нямат постоянен достъп до мрежовото свързване, затова хардуерните часовници са полезни за това, Linux да може да настрои системното време на тяхна база. По-добре е от ръчното задаване на времето, дори и да може да се различава от реалното време.
Заключение
В тази статия ще разгледаме някои инструменти за управление на дата, време и часови зони. Инструментът systemd-timesyncd предоставя NTP-клиент, който може да синхронизира времето на локалния хост с NTP-сървър. Въпреки това systemd-timesyncd не предоставя сървърна услуга, така че ако имате нужда от NTP-сървър в мрежата си, трябва да използвате нещо друго — например Chrony, за да функционира като сървър.
Предпочитам да имам единствена реализация за всяка услуга в мрежата си, затова използвам Chrony. Ако не ви е необходим локален NTP-сървър или ако не възразявате да използвате Chrony като сървър и systemd-timesyncd като SNTP-клиент. Все пак няма необходимость да използвате допълнителните функции на Chrony като клиент, ако сте доволни от функционалността на systemd-timesyncd.
Още нещо: не сте задължени да използвате инструментите на systemd за реализиране на NTP. Можете да използвате стара версия на ntpd, Chrony или друга реализация на NTP. Накратко, systemd се състои от много услуги; много от тях са незадължителни, така че можете да ги деактивирате и да използвате нещо друго вместо тях. Не е огромен монолитен звяр. Може да не харесвате systemd или частите му, но трябва да вземете обосновано решение.
Харесва ми реализацията на NTP в systemd, но предпочитам Chrony, защото по-добре отговаря на нуждите ми. Това е Linux, бебе -)
Реклама
VDSina предлага , огромен избор на операционни системи за автоматична инсталация, можете да инсталирате всяка ОС от вашия , удобен всичко от собствена разработка и заплащане на ден. Напомняме, че имаме вечни сървъри, които определено не подлежат на времето 😉
Източник: habr.com
