Sfat Unix: Comenzi NTP

ITworld.com – Trimiteți astăzi întrebările dumneavoastră despre Unix!

Vezi și alte sfaturi și trucuri Unix

Cronica de săptămâna trecută a prezentat NTP, Network Time Protocol și conceptul de menținere a timpului de mare precizie. Deși există numeroase comenzi care îi ajută pe administratorii de sistem să mențină un timp destul de precis pe sistemele pe care le gestionează, cele mai evidente sunt foarte limitate. Ca urmare, majoritatea rețelelor suferă de discrepanțe mari în ceea ce privește ora sistemului. Diferențe de timp precum cele prezentate mai jos (preluate dintr-o rețea reală) nu sunt neobișnuite:

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

Doar în cadrul acestor unsprezece sisteme interogate secvențial, putem observa o variabilitate considerabilă a timpului raportat. Deși sondajele au avut loc pe parcursul a câteva secunde, diferențele de timp sunt considerabil mai mari de câteva secunde. Există, de fapt, o diferență de 18 minute și 44 de secunde între cel mai devreme și cel mai târziu timp raportat. Dacă am fi sondat întreaga rețea, diferența dintre cea mai timpurie și cea mai recentă oră raportată ar fi fost și mai mare.

Pentru a forța sisteme ca acestea să se apropie mai mult de timp, administratorul de sistem poate folosi oricare dintre o serie de comenzi, cu diferite grade de succes.

Comanda date

Comanda date, care permite administratorului de sistem să seteze data și ora, este cea mai evidentă comandă pentru corectarea orei pe un sistem, dar depinde de faptul că administratorul de sistem are o referință de timp destul de precisă. Această comandă se execută, de asemenea, un sistem la un moment dat. Utilizând comanda date pentru a sincroniza două sisteme, este puțin probabil ca un administrator de sistem să reușească să apropie orele sistemelor mai mult de câteva secunde una de cealaltă. Comanda date nu este în mod clar comanda de alegere atunci când sincronizarea este importantă. Și, într-o rețea cu mai multe sute de sisteme, această abordare poate fi atât plictisitoare, cât și inexactă.

Dacă un administrator de sistem ar emite o comandă date într-o buclă precum cea prezentată mai jos, orele sistemului ar fi mai apropiate decât cele prezentate mai sus, dar ar continua să varieze cu atâtea secunde cât durează finalizarea buclei. Și, bineînțeles, această variație de timp va fi din ce în ce mai semnificativă dacă trebuie introdusă o parolă pentru fiecare comandă ssh.

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

Comanda date este în mod clar doar minimal utilă în sincronizarea sistemelor. Ceasurile de sistem care tind să câștige sau să piardă timp, chiar dacă numai de ordinul a câteva secunde în fiecare zi, vor lărgi rapid din nou decalajele de timp. În plus, sistemele configurate pentru alte fusuri orare – cum ar fi sistemul care raportează ora ca fiind GMT în lista prezentată mai sus, ar avea ceasurile lor decalate cu câteva ore dacă am folosi comanda date, așa cum se arată.

Comanda rdate

Comanda rdate, o alegere mult mai bună pentru sincronizarea ceasurilor într-o rețea, necesită ca un administrator de sistem să selecteze un sistem accesibil în rețeaua sa, probabil unul care păstrează o oră destul de precisă pentru a o folosi ca referință de timp pentru restul.

Următoarea buclă ar da rezultate mult mai bune decât cea prezentată mai sus. La urma urmei, timpul necesar pentru ca această buclă să se finalizeze nu va avea niciun efect dăunător, deoarece fiecare comandă rdate se va sincroniza cu ora de pe serverul de referință în momentul în care comanda respectivă este executată.

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

În plus, comanda rdate nu anulează fusul orar de pe sistemul țintă. În loc să seteze literalmente ora la o valoare care este furnizată în linia de comandă, rdate solicită date orare care sunt independente de fusul orar. Cu alte cuvinte, dacă executați „rdate ” pe un sistem care utilizează GMT, ora de pe sistemul GMT va fi setată corect.

Comanda rdate este, în general, executată la pornirea sistemului sau prin cron, o dată pe zi sau o dată pe oră, pentru a alinia ceasurile de pe sistemele de pe o rețea locală. În comparație cu ceasurile de sistem indisciplinate prezentate anterior, aceasta reprezintă o mare îmbunătățire. Cu toate acestea, din punctul de vedere al fiecărui sistem al cărui ceas este resetat cu rdate, se pot întâmpla unele lucruri foarte neobișnuite. Ceasurile pot sări înainte sau înapoi în timp de fiecare dată când se execută comanda rdate. Acest comportament poate duce la unele interpretări foarte ciudate ale evenimentelor sensibile la timp.

Comanda NTP

NTP are în mod clar avantaje considerabile față de comenzile date și rdate. În primul rând, NTP oferă o modalitate de a sincroniza ceasurile de sistem cu o precizie neobișnuită și de a face ajustările necesare fără probleme, evitând salturile în timp pe care comenzi precum rdate le provoacă adesea. Să aruncăm o privire mai atentă.

NTP oferă două comenzi pentru ajustarea orei: comanda ntpdate — care setează ora sistemului la fel ca și comanda rdate (de ex, prin raportarea la un sistem de la distanță pentru a obține ora curentă) și demonul NTP — ntpd sau xntpd — care oferă un mecanism mult mai elaborat pentru a ajunge și a se sincroniza la ora corectă.

Comanda ntpdate

Comanda ntpdate — folosită în general, ca și comanda rdate, la pornirea sistemului, la cerere sau periodic prin cron — sincronizează ora „ad-hoc” într-un mod similar cu rdate. Cu toate acestea, comanda ntpdate are două avantaje foarte importante față de rdate.

Pentru început, ntpdate face referire la un server NTP, nu doar la un cronometru de încredere accesibil în rețeaua dumneavoastră. Deoarece serverele NTP sunt, în general, legate de ierarhia NTP (și, în ultimă instanță, de un ceas atomic foarte precis), este aproape garantat că acestea sunt mai precise decât orice server care are pur și simplu un cip de ceas bun.

În al doilea rând, ntpdate poate colecta o serie de eșantioane de timp de la mai multe surse de timp (adică mai multe servere NTP) și apoi poate selecta ora care pare cea mai precisă. Astfel, nu numai că comanda ntpdate face referire la o sursă de timp care are mai multe șanse să fie exactă decât cele selectate pentru a fi utilizate cu rdate, dar face referire la un număr de astfel de sisteme și aplică un proces de selecție sofisticat.

O comandă ntpdate ar putea arăta astfel:

# ntpdate 129.6.15.15.28

14 Oct 10:52:41 ntpdate: ajustează serverul de timp 129.6.15.28 offset -0.003350 sec

De fapt, dacă comanda ntpdate este instalată pe sistemul dumneavoastră (/usr/sbin/ntpdate pe majoritatea sistemelor Solaris), ați putea încerca exact această comandă ntpdate chiar acum. Serverul de referință din acest exemplu este un server NTP de la NIST din Gaithersburg, Maryland.

Alternativ, ați putea încerca o comandă ntpdate ca aceasta:

# ntpdate 129.6.15.28 216.200.93.8 208.184.49.9

14 oct 14:57:41 ntpdate: ajustează serverul de timp 216.200.93.8 offset 0.015733 sec

În acest caz, sunt interogate mai multe servere NTP.

Demonul NTP

În timp ce comanda ntpdate oferă un nivel de control al timpului care este cu un ordin de mărime mai bun decât rdate, demonul NTP face un pas uriaș dincolo de ntpdate cu algoritmii săi sofisticați de maximizare a acurateței și fiabilității. Folosit în mod corespunzător, daemonul NTP utilizează, de asemenea, o cantitate minimă de resurse de rețea – vom examina acest aspect săptămâna viitoare.

Demonul NTP oferă algoritmi sofisticați care sincronizează fără probleme ceasurile de sistem printr-un proces de aproximare succesivă. Cu cât daemonul rulează mai mult timp, cu atât ora sistemului se potrivește mai bine cu cea a sursei sale. Acesta face ajustări mari rapid și apoi ajustări mai mici în timp pentru a evita depășirea orei corecte.

Pot fi necesare câteva minute sau ore pentru ca NTP să se apropie de un nivel fin de acuratețe, dar, odată ce o face, fiabilitatea timpului din sistem poate fi uimitor de precisă. Acestea fiind spuse, precizia orară a NTP este, totuși, legată în cele din urmă de precizia surselor de timp la care face referire. Fiecare server NTP încearcă să se sincronizeze cu UTC (adică timpul universal coordonat) folosind cea mai bună sursă de timp și cea mai bună cale de transmisie disponibile. În cazul în care setul de servere la care se face referire transmite ore care nu sunt foarte apropiate între ele, NTP va considera că unul sau mai multe dintre aceste servere de timp sunt defecte și le va neglija. Așadar, pentru a obține o oră precisă folosind NTP, alegerea serverelor de timp trebuie să fie precisă.

Cei care se apropie de NTP trebuie să rețină că rularea procesului NTP daemon NU face neapărat dintr-un sistem un server NTP. Faptul că un sistem compatibil NTP joacă rolul de client sau de server este determinat de fișierele de configurare ale daemonului de pe acel sistem – lucru pe care îl vom examina în rubrica de săptămâna viitoare.

Acest articol, „Sfat Unix: Comenzi NTP” a fost publicată inițial de ITworld .

.