Ихэнх хүмүүс цагийг хянаж байдаг. Бид цагтаа босоод өглөөний зан үйлээ дуусгаад ажилдаа явах, үдийн цайны завсарлага авах, төслийн эцсийн хугацааг биелүүлэх, төрсөн өдөр, баяр тэмдэглэх, онгоцонд суух гэх мэт.
Түүгээр ч барахгүй: бидний зарим нь цаг хугацаанд хэт автдаг. Миний цаг нарны эрчим хүчээр ажилладаг бөгөөд Үндэсний Стандарт, Технологийн Хүрээлэнгээс үнэн зөв цаг авдаг (
Төхөөрөмжүүд мөн цагийг хянадаг
Манай төхөөрөмж, компьютерт цаг хугацаа хэрэгтэй байгаа олон шалтгаан бий. Жишээлбэл, банк, хөрөнгийн зах зээл болон бусад санхүүгийн бизнест гүйлгээг зохих дарааллаар хийх ёстой бөгөөд үүнд цаг хугацааны үнэн зөв дараалал чухал байдаг.
Манай утас, таблет, машин, GPS систем, компьютер бүгд цаг, огнооны зөв тохиргоог шаарддаг. Би компьютерийнхээ ширээний цагийг зөв цагийг харуулахыг хүсч байна. Миний орон нутгийн хуанли дээр зөв цагт сануулагч гарч ирэхийг хүсч байна. Зөв цаг нь cron болон systemd ажлуудыг зөв цагт ажиллуулах боломжийг олгодог.
Бүртгэлд огноо, цаг чухал байдаг тул огноо, цаг дээр тулгуурлан тодорхой бүртгэлийг олох нь арай хялбар байдаг. Жишээлбэл, би нэг удаа DevOps-т ажиллаж байсан (тэр үед үүнийг тэгж нэрлэдэггүй байсан) Хойд Каролина мужид цахим шуудангийн системийг байгуулж байсан. Бид өдөрт 20 сая гаруй имэйл боловсруулдаг байсан. Хэд хэдэн серверээр дамжуулан имэйлийг хянах, эсвэл газарзүйн хувьд тархсан хостууд дээрх бүртгэлийн файлуудыг ашиглан үйл явдлын яг дарааллыг тодорхойлох нь тухайн компьютерийг цаг тухайд нь синхрончлоход илүү хялбар болно.
Нэг удаа - олон цаг
Линуксийн хостууд системийн цаг болон RTC цаг байдгийг харгалзан үзэх ёстой. RTC (Бодит цагийн цаг) нь техник хангамжийн цагны хувьд бага зэрэг хачирхалтай бөгөөд тийм ч зөв биш нэр юм.
Системийн эх хавтан дээрх батерейг ашиглан компьютер унтарсан ч техник хангамжийн цаг тасралтгүй ажилладаг. RTC-ийн гол үүрэг бол цагийн сервертэй холбогдох боломжгүй үед цагийг хадгалах явдал юм. Интернэтээр цагийн серверт холбогдох боломжгүй байсан өдрүүдэд компьютер бүр үнэн зөв дотоод цагтай байх ёстой байв. Үйлдлийн систем нь ачаалах үед RTC-д хандах ёстой байсан ба хэрэглэгч BIOS-ийн тоног төхөөрөмжийн тохиргооны интерфейсийг ашиглан системийн цагийг гараар тохируулах шаардлагатай байсан бөгөөд энэ нь зөв эсэхийг шалгах ёстой.
Техник хангамжийн цаг нь цагийн бүсийн тухай ойлголтыг ойлгодоггүй; RTC нь зөвхөн цагийг хадгалдаг болохоос цагийн бүс эсвэл UTC-ээс офсет биш (Зохицуулсан Universal Time, GMT эсвэл Greenwich Mean Time гэж нэрлэдэг). Та RTC-г энэ нийтлэлд сүүлд авч үзэх хэрэгслийг ашиглан суулгаж болно.
Системийн цаг нь таны ширээний компьютер дээрх GUI цаг, огноо командын гаралт, бүртгэлийн цагийн тэмдэгт дээр үйлдлийн систем харуулах цаг юм. Энэ нь файл үүсгэх, өөрчлөх, нээхэд мөн хамаарна.
Хуудсан дээр
NTP ямар байна?
Дэлхий даяарх компьютерууд NTP серверүүдийн шатлалыг ашиглан интернетийн стандарт цагтай цагаа синхрончлохын тулд NTP (Сүлжээний Цагийн Протокол) ашигладаг. Үндсэн цагийн серверүүд нь 1-р давхаргад байрладаг бөгөөд хиймэл дагуул, радио эсвэл модемоор дамжуулан утасны шугамаар дамжуулан 0-р түвшний янз бүрийн үндэсний цагийн үйлчилгээтэй шууд холбогддог. 0 давхаргын цагийн үйлчилгээ нь атомын цаг, атомын цагаар дамжуулж буй дохиогоор тохируулсан радио хүлээн авагч эсвэл GPS хиймэл дагуулаар дамжуулж буй өндөр нарийвчлалтай цагийн дохиог ашигладаг GPS хүлээн авагч байж болно.
Лавлагаа серверүүдийн дийлэнх нь олон нийтэд нээлттэй хэдэн мянган нийтийн NTP давхаргын 2 сервертэй. NTP сервер хэрэгтэй олон тооны хосттой олон байгууллага, хэрэглэгчид (өөрийгөө оруулаад) өөрсдийн цагийн серверийг тохируулахаар сонгодог бөгөөд ингэснээр зөвхөн нэг локал хост 2 эсвэл 3-р давхаргад ханддаг. Дараа нь тэд сүлжээний үлдсэн зангилааг локал сүлжээг ашиглахаар тохируулдаг. цагийн сервер. Миний гэрийн сүлжээний хувьд энэ нь 3-р түвшний сервер юм.
NTP-ийн янз бүрийн хэрэгжилт
NTP-ийн анхны хэрэгжилт нь ntpd юм. Дараа нь chronyd болон systemd-timesyncd гэсэн хоёр шинэ нь нэгдсэн. Гурвуулаа локал хостын цагийг NTP цагийн сервертэй синхрончилдог. systemd-timesyncd үйлчилгээ нь chronyd шиг найдвартай биш боловч ихэнх зорилгод хангалттай сайн. Хэрэв RTC синхрончлолгүй бол локал системийн цаг бага зэрэг өөрчлөгдөх үед NTP сервертэй синхрончлохын тулд системийн цагийг аажмаар тохируулж болно. Systemd-timesync үйлчилгээг цагийн сервер болгон ашиглах боломжгүй.
- Chrony нь хуучин ntpd үйлчилгээнээс хамаагүй хурдан цагийн сервертэй синхрончлох боломжтой. Энэ нь байнга ажилладаггүй зөөврийн компьютер эсвэл ширээний компьютерт тохиромжтой.
- Энэ нь хост унтдаг эсвэл унтах горимд орох үед, эсвэл ачаалал багатай үед цагийг удаашруулдаг давтамжийн уналтаас болж цаг өөрчлөгдөх зэрэг цагийн хэлбэлзлийг нөхөж чаддаг.
- Энэ нь тогтворгүй сүлжээний холболт эсвэл сүлжээний ачаалалтай холбоотой цаг хугацааны асуудлыг шийддэг.
- Энэ нь сүлжээний саатлыг зохицуулдаг.
- Анхны цаг синхрончлолын дараа Chrony цагийг хэзээ ч зогсоодоггүй. Энэ нь олон системийн үйлчилгээ болон програмуудад тогтвортой, тогтвортой цагийн хуваарийг хангадаг.
- Chrony нь сүлжээнд холбогдоогүй ч ажиллах боломжтой. Энэ тохиолдолд локал хост эсвэл серверийг гараар шинэчлэх боломжтой.
- Chrony нь NTP серверийн үүрэг гүйцэтгэх боломжтой.
Дахин хэлэхэд NTP бол Chrony эсвэл systemd-timesyncd ашиглан Linux хост дээр хэрэгжиж болох протокол юм.
NTP, Chrony болон systemd-timesyncd RPMs нь стандарт Fedora репозиторуудад байдаг. systemd-udev RPM нь Fedora дээр анхдагчаар суулгагдсан цөмийн үйл явдлын менежер боловч нэмэлт юм.
Та гурвыг суулгаж, хооронд нь сольж болно, гэхдээ энэ нь нэмэлт толгой өвдөх болно. Тиймээс хийхгүй байсан нь дээр. Fedora, CentOS, RHEL-ийн орчин үеийн хувилбарууд нь анхдагч хэрэгжүүлэлт болгон Chrony руу шилжсэн бөгөөд тэдгээр нь мөн systemd-timesyncd-тэй. Би Chrony-г сайн ажиллаж, NTP үйлчилгээнээс илүү сайн интерфэйсээр хангаж, илүү их мэдээлэл, хяналтыг өгдөг нь системийн администраторуудад таалагдах нь гарцаагүй гэж би бодож байна.
NTP үйлчилгээг идэвхгүй болгож байна
NTP үйлчилгээ аль хэдийн таны хост дээр ажиллаж байгаа байж магадгүй. Хэрэв тийм бол өөр зүйл рүү шилжихээсээ өмнө үүнийг идэвхгүй болгох хэрэгтэй. Би chronyd ажиллаж байсан тул үүнийг зогсоож, идэвхгүй болгохын тулд дараах тушаалуудыг ашигласан. Өөрийн хост дээр ажиллуулж буй аливаа NTP дэмондоо тохирох тушаалуудыг ажиллуулна уу:
[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Removed /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#
Үйлчилгээг зогсоож, идэвхгүй болгосон эсэхийг шалгана уу:
[root@testvm1 ~]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:chronyd(8)
man:chrony.conf(5)
[root@testvm1 ~]#
Эхлэхээс өмнө статусыг шалгана уу
Системийн цагийн синхрончлолын төлөв нь NTP үйлчилгээ ажиллаж байгаа эсэхийг тодорхойлох боломжийг танд олгоно. Та NTP-г хараахан эхлүүлж амжаагүй байгаа тул timesyc-status команд нь дараах зүйлийг заана.
[root@testvm1 ~]# timedatectl timesync-status
Failed to query server: Could not activate remote peer.
Статусын шууд хүсэлт нь чухал мэдээллийг өгдөг. Жишээлбэл, ямар ч аргумент эсвэл сонголтгүй timedatectl тушаал нь төлөвийн дэд командыг анхдагчаар гүйцэтгэдэг:
[root@testvm1 ~]# timedatectl status
Local time: Fri 2020-05-15 08:43:10 EDT
Universal time: Fri 2020-05-15 12:43:10 UTC
RTC time: Fri 2020-05-15 08:43:08
Time zone: America/New_York (EDT, -0400)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
This mode cannot be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#
Энэ нь танд хостын орон нутгийн цаг, UTC цаг, RTC цагийг өгөх болно. Энэ тохиолдолд системийн цагийг Америк / Нью_Йорк (TZ) цагийн бүсэд тохируулсан, RTC нь орон нутгийн цагийн бүс дэх цагт тохируулагдсан бөгөөд NTP үйлчилгээ идэвхгүй байна. RTC цаг нь системийн цагаас бага зэрэг хазайж эхэлсэн. Энэ нь цаг нь синхрончлогдоогүй системүүдийн хувьд хэвийн үзэгдэл юм. Хост дээрх офсетийн хэмжээ нь систем хамгийн сүүлд синхрончлогдсоноос хойш өнгөрсөн хугацаанаас хамаарна.
Бид мөн RTC-д орон нутгийн цаг ашиглах тухай анхааруулга хүлээн авсан - энэ нь цагийн бүсийн өөрчлөлт болон DST тохиргоонд хамаарна. Хэрэв өөрчлөлт хийх шаардлагатай үед компьютер унтарсан бол RTC өөрчлөгдөхгүй. Гэхдээ өдөр бүр ажилладаг сервер эсвэл бусад хостуудын хувьд энэ нь огт асуудал биш юм. Нэмж хэлэхэд, NTP цагийн синхрончлолыг хангадаг аливаа үйлчилгээ нь эхний эхлүүлэх үе шатанд хостын цагийг тохируулах тул эхлүүлж дууссаны дараа цаг дахин зөв байх болно.
Цагийн бүсийг тохируулах
Суулгах явцад ихэвчлэн цагийн бүсийг зааж өгдөг бөгөөд дараа нь өөрчлөх даалгавар байдаггүй. Гэсэн хэдий ч та цагийн бүсийг өөрчлөх шаардлагатай үе байдаг. Үүнд туслах хэд хэдэн хэрэгсэл байдаг. Линукс нь хостын локал цагийн бүсийг тодорхойлохын тулд цагийн бүсийн файлуудыг ашигладаг. Эдгээр файлууд нь лавлахад байна /usr/share/zoneinfo. Анхдагч байдлаар, миний цагийн бүсийн хувьд систем үүнийг зааж өгдөг: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Гэхдээ цагийн бүсийг өөрчлөхийн тулд ийм нарийн ширийн зүйлийг мэдэх шаардлагагүй.
Хамгийн гол нь таны байршлын албан ёсны цагийн бүсийн нэр, холбогдох тушаалыг мэдэх явдал юм. Та цагийн бүсийг Лос Анжелес болгон өөрчлөхийг хүсч байна гэж бодъё:
[root@testvm2 ~]# timedatectl list-timezones | column
<SNIP>
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
<SNIP>
Одоо та цагийн бүсийг тохируулах боломжтой. Би өөрчлөлтийг шалгахын тулд огноо командыг ашигласан, гэхдээ та 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 хэрэгжилтийг хангадаг. Энэ нь Fedora болон Ubuntu дээр анхдагчаар суулгагдсан байдаг. Гэхдээ энэ нь зөвхөн Ubuntu дээр анхдагчаар эхэлдэг. Бусад түгээлтийн талаар би сайн мэдэхгүй байна. Та өөрөө шалгаж болно:
[root@testvm1 ~]# systemctl status systemd-timesyncd
systemd-timesyncd-г тохируулж байна
systemd-timesyncd-ийн тохиргооны файл нь /etc/systemd/timesyncd.conf. Энэ бол хуучин NTP болон chronyd үйлчилгээнүүдээс цөөн сонголттой энгийн файл юм. Миний Fedora VM дээрх энэ файлын агуулгыг (цаашид нэмэлт өөрчлөлт оруулалгүй) энд оруулав:
# 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
Үүнд тайлбараас гадна цорын ганц хэсэг нь [Цаг] юм. Бусад бүх мөрүүдэд тайлбар хийсэн. Эдгээр нь анхдагч утгууд бөгөөд үүнийг өөрчлөх ёсгүй (хэрэв танд шалтгаан байхгүй бол). Хэрэв танд NTP= мөрөнд тодорхойлогдсон NTP цагийн сервер байхгүй бол Fedora нь өгөгдмөл Fedora цагийн серверт тохируулна. Би ихэвчлэн цагийн серверээ нэмдэг:
NTP=myntpserver
Ажиллах цагийн синхрончлол
Та 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 - Network Time Synchronization
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: "Initial synchronization to time server 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]: System clock time unset or jumped backwards, restoring from recorded timestamp: Sat 2020-05-16 13:56:53 EDT
May 16 13:56:53 testvm2.both.org systemd[1]: Started Network Time Synchronization.
May 16 13:57:56 testvm2.both.org systemd-timesyncd[822]: Initial synchronization to time server 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#
Системийн цагийг тохируулаагүй эсвэл дахин тохируулсан гэсэн бүртгэлийн мессежийг анзаараарай. Timesync үйлчилгээ нь цагийн тэмдэг дээр үндэслэн системийн цагийг тохируулдаг. Цагийн тэмдэг нь timesyc дэмоноор хадгалагддаг бөгөөд амжилттай синк хийх бүр дээр үүсгэгддэг.
Timedatectl команд нь системийн цагнаас техник хангамжийн цагийн утгыг авах арга байхгүй. Энэ нь зөвхөн командын мөрөнд оруулсан утгаас цаг, огноог тохируулах боломжтой. Та hwclock командыг ашиглан RTC-г системийн цагтай ижил утгатай болгож болно.
[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 гэж? Энэ нь бүхэлдээ үнэн биш: энэ нь зөвхөн цагийн серверт сүлжээний холболттой тохиолдолд л тохиолдох болно. Гэсэн хэдий ч олон системүүд сүлжээнд холбогдох боломжгүй байдаг тул системийн цагийг тохируулахын тулд Линукс ашиглахад техник хангамжийн цаг хэрэгтэй. Энэ нь бодит цаг хугацаанаас хазайж магадгүй ч гараар цагийг тохируулахаас илүү дээр юм.
дүгнэлт
Энэ нийтлэлд огноо, цаг, цагийн бүсийг удирдах зарим хэрэгслийг авч үзсэн болно. Systemd-timesyncd хэрэгсэл нь локал хост дээрх цагийг NTP сервертэй синхрончлох боломжтой NTP клиентээр хангадаг. Гэсэн хэдий ч systemd-timesyncd нь серверийн үйлчилгээ үзүүлдэггүй тул сүлжээндээ NTP сервер хэрэгтэй бол серверийн үүргийг гүйцэтгэхийн тулд Chrony гэх мэт өөр зүйлийг ашиглах ёстой.
Би сүлжээндээ ямар ч үйлчилгээнд зориулж ганцхан хувилбартай байхыг илүүд үздэг тул Chrony ашигладаг. Хэрэв танд локал NTP сервер хэрэггүй эсвэл Chrony-г сервер болгон, systemd-timesyncd-г SNTP клиент болгон ашиглахаас татгалзахгүй бол. Эцсийн эцэст, хэрэв та systemd-timesyncd-ийн үйл ажиллагаанд сэтгэл хангалуун байвал Chrony-ийн нэмэлт функцуудыг үйлчлүүлэгчийн хувьд ашиглах шаардлагагүй болно.
Өөр нэг тэмдэглэл: NTP-ийг хэрэгжүүлэхийн тулд та systemd хэрэгслийг ашиглах шаардлагагүй. Та ntpd, Chrony эсвэл өөр NTP хэрэгжүүлэлтийн хуучин хувилбарыг ашиглаж болно. Эцсийн эцэст, systemd нь олон тооны үйлчилгээнээс бүрддэг; тэдгээрийн олонх нь сонголттой тул та тэдгээрийг унтрааж оронд нь өөр зүйл ашиглаж болно. Энэ бол асар том цул мангас биш юм. Та системд эсвэл түүний зарим хэсэгт дургүй байж магадгүй ч та мэдээлэлтэй шийдвэр гаргах хэрэгтэй.
Би systemd-ийн NTP-ийн хэрэгжилтэд дуртай, гэхдээ энэ нь миний хэрэгцээнд илүү тохирсон учраас би Chrony-г илүүд үздэг. Энэ бол Линукс, хонгор минь -)
Сурталчилгааны эрх
VDSina санал болгож байна
Эх сурвалж: www.habr.com