Mininávody na linuxu #1 čas na linuxu

Trocha teorie

Na linuxu rozlišujeme tzv. hardware clock a system clock. Tedy hardwarový čas a systémový čas. Hardwarový čas je udržován na základní desce počítače a ikdyž je počítač odstavený od elektřiny, v počítači se nachází tzv. CMOS baterie (ve stolních počítačích je to baterie typu CR2032, která se dává též do různých hodinek atd…)

 

Jedna baterie velikosti knoflíku s nápisem CR2032 3V + a vedle ní na ležato na sobě naskládané 4 další baterie typu CR2032
Baterie CR 2032

Systémový čas se načítá zpravidla v okamžiku bootu z hardwarového času. Čas je možný synchronizovat na linuxu pomocí NTP (Network Time protocol) většinou pomocí daemona NTPD. Čas se synchronizuje oproti časovým serverům. V ČR nejznámější tik.cesnet.cz či tak.cesnet.cz. Na Windows známe profláklý název time.windows.com.

Hardwarové hodiny (rtc = real time clock) mají své zařízení v /dev/rtc. Mnohé systémy mají více hodin:

uzivatel@server:~# ls /dev/rtc*
/dev/rtc /dev/rtc0

V souboru /etc/adjtime vidíme výsledek posledního použití příkazu hwclock. Ukazuje nám skluz (anglicky clock drift), tedy zpoždění, nebo naopak předcházení hardwarových hodin a o kolik.

uzivatel@server:~# cat /etc/adjtime
0.048326 1500445272 0.000000
1500445272
UTC



Příkazy:

uzivatel@server:~# date
St čec 19 08:07:56 CEST 2017


uzivatel@server:~# hwclock -r
St 19. červenec 2017, 08:08:45 CEST -0.151119 sekundy

uzivatel@server:~# hwclock -r && date
St 19. červenec 2017, 08:9:18 CEST -0.594535 sekundy
St čec 19 08:9:18 CEST 2017

Mělo by to být v podstatě jedno jestli tam dáte && nebo ;.

uzivatel@server:~# hwclock -r; date
St 19. červenec 2017, 08:10:56 CEST -0.860130 sekundy
St čec 19 08:10:56 CEST 2017

Hardwarový čas počítače (tzv. hardware clock), který se drží v biosu i po vypnutí počítače nastavíme příkazem:
uzivatel@server:~# hwclock --set --date "7/19/2017 8:12"

Pokud plánujete psát nějaké bash skripty, tak se Vám bude hodit tento příkaz:
uzivatel@server:~# date "+%d.%m.%Y %T"
19.07.2017 08:19:34

příkaz hwclock -w přepíše hardwarový čas systémovým časem:
uzivatel@server:~# date; hwclock -r; hwclock -w;echo "po nastaveni:" ;hwclock -r;date
St čec 19 08:21:11 CEST 2017
St 19. červenec 2017, 08:21:33 CEST -0.375769 sekundy
po nastaveni:
St 19. červenec 2017, 08:21:13 CEST -0.501059 sekundy
St čec 19 08:21:13 CEST 2017

Příkaz hwclock -s přepíše systémový čas hardwarovým časem:

uzivatel@server:~# hwclock -r; date; hwclock -s; echo "po nastaveni systemoveho casu podle hardwaroveho casu"; hwclock -r; date;
St 19. červenec 2017, 08:23:27 CEST -0.703940 sekundy
St čec 19 08:23:27 CEST 2017
po nastaveni systemoveho casu podle hardwaroveho casu
St 19. červenec 2017, 08:23:29 CEST -1.000766 sekundy
St čec 19 08:23:29 CEST 2017

NTP (Network Time Protocol)
Ve zkratce Network Time protocol slouží k synchronizaci času po síti. Více Vám řekne třeba wikipedie nebo googlení. NTP umí používat jak Windows, tak Linux, tak MacOS i další operační systémy. Je to naprosto základní služba. Referenční čas používaný NTP je UTC, tedy Coordinated Universal Time.

Příkazy na Linuxu:

Ubuntu/Debian:

apt-get install ntpdate -y
ntpdate -q adresaserver se jednorázově dotáže na server a nastaví systémový čas v počítači.

uzivatel@server:~# hwclock -r;date ; ntpdate -q tik.cesnet.cz
St 19. červenec 2017, 08:27:48 CEST -0.032243 sekundy
St čec 19 08:27:48 CEST 2017

server 195.113.144.201, stratum 2, offset 0.001077, delay 0.03397
19 Jul 08:27:54 ntpdate[1202]: adjust time server 195.113.144.201 offset 0.001077 sec

Vysvětlím, co znamená to Stratum 2. Stratum 0 jsou atomové hodiny. Zkrátka referenční čas. Stratum 1 se dotazuje serveru Stratum 0 na to, jaký je přesný čas. Stratum 2 se proto dotazuje serveru Stratum 1, který se dotazuje na čas Stratum 0. Stratum 1 má přesnější čas, než stratum 3 a stratum 3 má přesnější čas, než Stratum 5.

uzivatel@server:~# ntptrace tik.cesnet.cz
tik.cesnet.cz: stratum 2, offset -0.000034, synch distance 0.000233
tak.cesnet.cz: stratum 1, offset 0.000008, synch distance 0.000000, refid 'GPS'

uzivatel@server:~# ntptrace tak.cesnet.cz
tak.cesnet.cz: stratum 1, offset 0.000008, synch distance 0.000000, refid 'GPS'

Z uvedeného výstupu vyplývá, že server tak.cesnet.cz je Stratum 1 a tedy má čas blíže k referenčnímu času. Referenční čas je z GPS. Zde je odkaz na další možné referenční používané zdroje časů z hlediska NTP protokolu.

 

ntpq na debianu/ubuntu

uzivatel@server:~# ntpq -p
 remote refid st t when poll reach delay offset jitter
==============================================================================
+46.28.110.244 45.127.113.2 3 u 839 1024 377 15.837 -0.313 0.783
-pyrrha.fi.muni. 195.113.144.238 2 u 26 1024 377 7.997 11.011 12.307
+sip.svinov.net 195.113.144.238 2 u 927 1024 377 9.644 -0.160 0.440
*host189-248-2-8 147.231.100.5 2 u 828 1024 377 11.489 1.152 0.950



uzivatel@server:~# ntpq -p tak.cesnet.cz
 remote refid st t when poll reach delay offset jitter
==============================================================================
oGPS_NMEA(0) .GPS. 0 l 7 64 377 0.000 -0.006 0.003
 LOCAL(0) .LOCL. 10 l - 64 0 0.000 0.000 0.000
 tik.cesnet.cz 195.113.144.238 2 u 37 64 377 0.456 -0.006 0.007
 ntp1.cesnet.cz 195.113.144.238 2 u 43 64 377 0.491 -0.015 0.020
 ntp3.cesnet.cz .INIT. 16 u - 64 0 0.000 0.000 0.000
+ntp2.ufe.cz .ATOM. 1 u 39 64 377 0.815 0.087 0.062
 ripe-ttm.cesnet 195.113.144.238 2 u 73d 64 0 0.783 0.144 0.000
+time-a.nist.gov .NIST. 1 u 19 64 377 118.498 1.988 0.017


ntpq na Centosu:

yum install ntp ntpdate ntp-doc -y

uzivatel@server:~# ntpq -p
ntpq: read: Connection refused


uzivatel@server:~# ntpq -p tak.cesnet.cz
 remote refid st t when poll reach delay offset jitter
==============================================================================
oGPS_NMEA(0) .GPS. 0 l 4971 64 377 0.000 -0.007 0.004
 LOCAL(0) .LOCL. 10 l - 64 0 0.000 0.000 0.000
 tik.cesnet.cz 195.113.144.238 2 u 4971 64 377 0.456 -0.006 0.009
 ntp1.cesnet.cz 195.113.144.238 2 u 4971 64 377 0.491 -0.015 0.018
 ntp3.cesnet.cz .INIT. 16 u - 64 0 0.000 0.000 0.000
+ntp2.ufe.cz .ATOM. 1 u 4971 64 377 0.815 0.087 0.064
 ripe-ttm.cesnet 195.113.144.238 2 u 73d 64 0 0.783 0.144 0.000
+time-a.nist.gov .NIST. 1 u 4971 64 377 118.498 1.988 0.018

NTP servery

Pool.ntp.org

Jedná se o servery rozmístěné po celém světě, které si aktualizují čas jednou za hodinu. Na Linuxu jejich nastavení najdete v /etc/ntp.conf

(a to jak na RedHatích distribucích vč. Centos a Fedora, tak na Debian/Ubuntu).

Je lokální NTP server dostupný?

Na Ubuntu/Debianu 7:

uzivatel@debianserver:~# /etc/init.d/ntp status
[ ok ] NTP server is running.

Na Centosu 7:
uzivatel@Centos7server:~# systemctl status ntpd
● ntpd.service - Network Time Service
 Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
 Active: inactive (dead)


ZoneInfo

Zoneinfo je seznam všech časových zón celé zeměkoule.

uzivatel@server:~# ls /usr/share/zoneinfo/
Africa CST6CDT GB Iceland MET posix UCT
America Cuba GB-Eire Indian Mexico posixrules Universal
Antarctica EET GMT Iran MST PRC US
Arctic Egypt GMT0 iso3166.tab MST7MDT PST8PDT UTC
Asia Eire GMT-0 Israel Navajo right WET
Atlantic EST GMT+0 Jamaica NZ ROC W-SU
Australia EST5EDT Greenwich Japan NZ-CHAT ROK zone.tab
Brazil Etc Hongkong Kwajalein Pacific Singapore Zulu
Canada Europe HST Libya Poland SystemV
CET Factory Chile localtime Portugal Turkey

Jak si nastavit čas jako je třeba v Zurichu?
cp /etc/localtime /tmp
ln -sf /usr/share/zoneinfo/Europe/Zurich /etc/localtime

Pro navrácení zpět:

cp /tmp/localtime /etc/

 

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

1 + nineteen =