Unix tipp:

ITworld.com – Küldje be Unix kérdéseit még ma!

Lásson további Unix tippeket és trükköket

A múlt heti rovatunkban bemutattuk az NTP-t, a Network Time Protocol-t és a nagy pontosságú időmérés fogalmát. Bár számos parancs létezik, amelyek segítségével a rendszergazdák meglehetősen pontos időt tarthatnak fenn az általuk kezelt rendszereken, a legkézenfekvőbbek nagyon korlátozottak. Ennek eredményeképpen a legtöbb hálózatban nagy eltérések vannak a rendszeridőben. Nem ritkák az olyan időeltolódások, mint amilyenek az alábbiakban láthatóak (egy valós hálózatból):

host01: Thu Oct 14 10:50:23 EDT 2004

host02: Thu Oct 14 10:43:53 EDT 2004

host03: Thu Oct 14 10:41:52 EDT 2004

host04: Thu Oct 14 10:50:13 EDT 2004

host05: Thu Oct 14 10:33:59 EDT 2004

host06: Thu Oct 14 14:48:17 GMT 2004

host07: Thu Oct 14 10:52:04 EDT 2004 *

host08: Thu Oct 14 10:52:33 EDT 2004

host09: Thu Oct 14 10:49:55 EDT 2004

host10: Thu Oct 14 10:33:20 EDT 2004 *

host11: Thu Oct 14 10:51:22 EDT 2004

Csak ezen a tizenegy egymás után lekérdezett rendszeren belül is jelentős eltéréseket láthatunk a bejelentett időben. Bár a lekérdezések néhány másodperc alatt történtek, az időkülönbségek néhány másodpercnél lényegesen nagyobbak. Valójában 18 perc és 44 másodperc különbség van a legkorábbi és a legkésőbbi bejelentett időpontok között. Ha az egész hálózatot lekérdeztük volna, a különbség a legkorábbi és a legkésőbbi jelentett időpontok között még nagyobb lett volna.

Az ilyen rendszerek időbeli közelségének kikényszerítésére a rendszergazda többféle parancsot is használhat, változó sikerrel.

A dátum parancs

A dátum parancs, amely lehetővé teszi a rendszergazda számára a dátum és az idő beállítását, a legkézenfekvőbb parancs a rendszer idejének korrigálására, de attól függ, hogy a rendszergazda rendelkezik-e meglehetősen pontos időreferenciával. Ez a parancs is rendszerenként egyenként futtatható. A dátumparanccsal két rendszer szinkronba hozásához a rendszergazda nem valószínű, hogy a rendszeridőket néhány másodpercnél közelebb tudja hozni egymáshoz. A date parancs egyértelműen nem a megfelelő parancs, ha a szinkronizálás fontos. Ráadásul egy több száz rendszerből álló hálózaton ez a megközelítés fárasztó és pontatlan is lehet.

Ha a rendszergazda egy dátumparancsot adna ki egy olyan ciklusban, mint az alábbiakban látható, akkor a rendszeridők közelebb lennének a fentiekhez, de továbbra is annyi másodperccel térnének el egymástól, ahány másodpercig tartana a ciklus befejezése. És természetesen ez az időeltolódás egyre jelentősebb lesz, ha minden egyes ssh parancshoz jelszót kell megadni.

for host in `cat host_list`do ssh $host "date 10141045"done

A date parancs nyilvánvalóan csak minimálisan hasznos a rendszerek szinkronizálásában. Azok a rendszerórák, amelyek hajlamosak időt nyerni vagy veszíteni, még ha csak napi néhány másodperces nagyságrendben is, gyorsan újra megnövelik az időeltolódásokat. Ráadásul a más időzónára konfigurált rendszerek – mint például a fenti listában szereplő, GMT-időzónát jelző rendszer – órái órákkal eltolódnának, ha a dátumparancsot az ábrán látható módon használnánk.

A rdate parancs

Az rdate parancs, amely sokkal jobb választás az órák szinkronizálására egy hálózaton, megköveteli, hogy a rendszergazda válasszon ki egy, a hálózatához elérhető rendszert, feltehetően olyat, amely meglehetősen pontos időt tart, hogy időreferenciaként használja a többi rendszer számára.

A következő ciklus sokkal jobb eredményt adna, mint a fent bemutatott. Végül is a ciklus befejezéséhez szükséges időnek nincs káros hatása, mivel minden rdate parancs szinkronizálódik a referencia-kiszolgáló idejével, amikor az adott parancsot futtatja.

for host in `cat host_list`do ssh $host "rdate timekeeper"done

Az rdate parancs ráadásul nem írja felül a célrendszer időzónáját. Ahelyett, hogy az időt szó szerint a parancssorban megadott értékre állítaná, az rdate olyan időadatokat kér, amelyek függetlenek az időzónától. Más szóval, ha az “rdate ” parancsot egy GMT-t használó rendszeren futtatja, akkor a GMT rendszer ideje helyesen lesz beállítva.

Az rdate parancsot általában a rendszer indításakor vagy a cron segítségével naponta vagy óránként egyszer futtatja a helyi hálózaton lévő rendszerek óráinak összehangolására. A korábban bemutatott fegyelmezetlen rendszerórákhoz képest ez nagy előrelépés. Azonban minden olyan rendszer szempontjából, amelynek óráját az rdate paranccsal állítja vissza, néhány nagyon szokatlan dolog történhet. Az órák minden egyes rdate parancs futtatásakor előre vagy hátra ugorhatnak az időben. Ez a viselkedés az időérzékeny események igen furcsa értelmezéséhez vezethet.

NTP-parancsok

Az NTP-nek egyértelműen jelentős előnyei vannak a date és rdate parancsokkal szemben. Egyrészt az NTP lehetőséget biztosít a rendszerórák szokatlan pontosságú szinkronizálására és a szükséges beállítások zökkenőmentes elvégzésére, elkerülve az időbeli ugrásokat, amelyeket az olyan parancsok, mint az rdate gyakran okoznak. Nézzük meg közelebbről.

Az NTP két parancsot biztosít az időbeállításhoz: az ntpdate parancsot — amely a rendszeridőt ugyanúgy állítja be, mint az rdate parancs (azaz, egy távoli rendszerre hivatkozva az aktuális időt), és az NTP démon — ntpd vagy xntpd — amely egy sokkal bonyolultabb mechanizmust biztosít a megfelelő idő eléréséhez és szinkronizálásához.

Az ntpdate parancs

Az ntpdate parancs — általában az rdate parancshoz hasonlóan a rendszer indításakor, igény szerint vagy időszakosan a cron segítségével használva — az rdate parancshoz hasonlóan “ad hoc” alapon szinkronizálja az időt. Az ntpdate parancsnak azonban két nagyon fontos előnye van az rdate-hez képest.

Egyrészt az ntpdate egy NTP-kiszolgálóra hivatkozik, nem csak egy megbízható, a hálózaton elérhető időmérőre. Mivel az NTP-kiszolgálók általában az NTP-hierarchiához (és végső soron egy nagyon pontos atomórához) vannak kötve, szinte garantáltan pontosabbak, mint bármely olyan kiszolgáló, amely egyszerűen csak egy jó órachippel rendelkezik.

A másik, hogy az ntpdate több időforrásból (azaz több NTP-kiszolgálóból) is képes időmintákat gyűjteni, majd kiválasztani a legpontosabbnak tűnő időt. Az ntpdate parancs tehát nem csak olyan időforrásra hivatkozik, amely nagyobb valószínűséggel pontosabb, mint az rdate segítségével kiválasztott időforrások, hanem számos ilyen rendszerre hivatkozik, és kifinomult kiválasztási eljárást alkalmaz.

Egy ntpdate parancs így nézhet ki:

# ntpdate 129.6.15.15.28

14 Oct 10:52:41 ntpdate: adjust time server 129.6.15.28 offset -0.003350 sec

Sőt, ha az ntpdate parancs telepítve van a rendszerén (/usr/sbin/ntpdate a legtöbb Solaris rendszeren), akkor most kipróbálhatja pontosan ezt az ntpdate parancsot. Ebben a példában a referencia-kiszolgáló a NIST NTP-kiszolgálója Gaithersburgban, Marylandben.

Alternatívaként kipróbálhatja az ntpdate parancsot így:

# ntpdate 129.6.15.28 216.200.93.8 208.184.49.9

14 Oct 14:57:41 ntpdate: adjust time server 216.200.93.8 offset 0.015733 sec

Ez esetben több NTP-kiszolgálót kérdezünk le.

Az NTP-démon

Míg az ntpdate parancs az rdate-nél nagyságrendekkel jobb szintű időellenőrzést biztosít, az NTP-démon a pontosság és megbízhatóság maximalizálására szolgáló kifinomult algoritmusaival óriási lépést tesz az ntpdate fölé. Megfelelően használva az NTP démon minimális mennyiségű hálózati erőforrást is igénybe vesz — ezt a kérdést a jövő héten vizsgáljuk meg.

Az NTP démon kifinomult algoritmusokat biztosít, amelyek a rendszerórákat zökkenőmentesen szinkronizálják a szukcesszív közelítés folyamatán keresztül. Minél tovább fut a démon, annál jobban egyezik a rendszeridő a forráséval. Gyorsan végez nagy kiigazításokat, majd idővel kisebb kiigazításokat, hogy elkerülje a megfelelő idő túllövését.

Az NTP-nek percekig vagy órákig is eltarthat, amíg megközelíti a finom pontossági szintet, de ha ez megtörtént, a rendszer időmegbízhatósága megdöbbentően pontos lehet. Ennek ellenére az NTP időpontossága végső soron az általa hivatkozott időforrások pontosságához kötött. Minden NTP-kiszolgáló a rendelkezésre álló legjobb időforrás és átviteli útvonal segítségével próbál szinkronizálni az UTC-hez (azaz az egyetemes koordinált időhöz). Ha a hivatkozott szerverek olyan időket továbbítanak, amelyek nincsenek egymáshoz közel, az NTP egy vagy több időszerverét hibásnak tekinti, és nem veszi figyelembe őket. Tehát ahhoz, hogy pontos időt kapjunk az NTP használatával, az időszerverek kiválasztásának pontosnak kell lennie.

Az NTP újdonsült felhasználóinak tudniuk kell, hogy az NTP daemon folyamat futtatása NEM feltétlenül teszi a rendszert NTP-kiszolgálóvá. Azt, hogy egy NTP-kompatibilis rendszer kliens vagy szerver szerepet játszik-e, a démon konfigurációs fájljai határozzák meg az adott rendszeren — ezt a jövő heti rovatban fogjuk megvizsgálni.

Ez a cikk, “Unix tipp: NTP Commands” eredetileg az ITworld oldalon jelent meg.