8 Aja hoidmine

See peatükk selgitab, kuidas süsteem Linux aega hoiab ja mida on vaja teha probleemide vältimiseks. Tavaliselt pole kasutajatel tarvis ajaga tegelemiseks midagi teha, aga vaid aruka käitumise korral.

8.1 Ajavööndid

Keskpäeval on päike kõige kõrgemal. Kuna Maa on ümmargune, saabub keskpäev eri kohtades erineval ajal. Nii tekib kohaliku aja mõiste. Kuni viibite samas kohas, pole eri paikade kohalike aegade erinevused olulised.

Niipea kui asute suhtlema kaugete paikadega, märkate vajadust ühise aja järele. Tänapäeval suhtleb enamik maailma paiku paljude teiste paikadega ja seetõttu peab olema defineeritud globaalne ajamõõtestandard. Seda aega nimetatakse universaalajaks (UT või UTC, varem tuntud kui Greenwichi aeg või GMT). Kui erinevaid kohalikke aegu kasutavatel inimestel on tarvis suhelda, võivad nad aega väljendada universaalajas, mis peaks vältima segadust sündmuste toimumisaegades.

Iga kohalik aeg määratakse kindlaks ajavööndiga. Kuigi geograafia lubab kõigil samaaegse keskpäevaga paikadel kuuluda samasse ajavööndisse, teeb poliitika selle saavutamise raskeks. Erinevate põhjuste tõttu kasutavad mitmed riigid päevavalgust säästvat ajaarvestust, mis tähendab kellaaja liigutamist nii, et oleks rohkem loomulikku valgust töö ajal (lähevad üle suveajale) ja tõstavad kellaaja tagasi talveks. Teised riigid ei tee seda. Sesooniaja kasutajad ei kooskõlasta alati teistega osutite nihutamise hetke ning lisaks muudavad reegleid aastast aastasse.

Ajavööndit on parem nimetada asukoha järgi või öeldes erinevuse kohaliku ja universaalaja vahel. USA-s ja mõnes teises riigis on kohalikel ajavöönditel nimi ning kolmetäheline lühend. Lühendid pole ühesed ja neid ei peaks kasutama, kui riiki pole eraldi ära mainitud. Lihtsam on rääkida kohalikust ajast Helsingis kui näiteks Ida-Euroopa ajast, kuna mitte kõik Ida-Euroopa riigid ei järgi samu reegleid.

Linuxil on ajavööndite pakett, mis teab kõiki ajavööndeid ja on reeglite muutumisel hõlpsasti värskendatav. Süsteemiülemal jääb vaid üle valida sobiv ajavöönd. Ka iga kasutaja saab seada oma ajavööndi, sest mitmed inimesed töötavad arvutitega eri riikides läbi Interneti. Kui kohalikus ajavööndis sesooniaja reeglid muutuvad, värskendage Linuxi vastavat osa.

Personaalarvutil on akutoitega riistvarakell. Aku tagab kella töö ka siis, kui ülejäänud arvuti on ilma elektrita (st välja lülitatud). Riistvarakella saab seada BIOS-e häälestuskuval või suvalises töötavas operatsioonisüsteemis.

Linuxi tuum jälgib aega riistvarakellast sõltumatult. Alglaadimisel võrdsustab Linux oma kella riistvarakellaga. Pärast seda töötavad mõlemad kellad sõltumatult. Linux hoiab oma kella ise, kuna riistvarakella vaatamine on aeglane ja keerukas.

Tuuma kell näitab alati universaalaega. Nii ei pea tuum ajavöönditest midagi teadma — lihtsus tõstab töökindlust ja hõlbustab ajavöönditeabe värskendamist. Iga protsess käsitleb ajavööndi teisendusi ise (kasutades ajavööndipaketi standardseid vahendeid).

Riistvarakell võib näidata kohalikku või universaalaega. Tavaliselt eelistatakse universaalaega, kuna siis pole vaja riistvarakella suve- või talveajale üleminekul muuta. Kahjuks mõned personaalarvutite operatsioonisüsteemid (kaasa arvatud MS-DOS, Windows ja OS/2) eeldavad, et riistvarakell näitab kohalikku aega. Linux võib käsitseda mõlemaid, aga kui riistvarakell näitab kohalikku aega, tuleb pidevalt jälgida sesooniaja muutumist (muidu tekib erinevus kohaliku ajaga).

8.2 Aja esitamine ja seadmine

Süsteemis Debian määrab ajavööndi sümboolne link faili /etc/localtime, kus kirjeldatakse kohalikku ajavööndit. Ajavööndi andmefailid on salvestatud kataloogis /usr/lib/zoneinfo. Teistes Linuxi variantides võib esineda erinevusi.

Kasutaja saab oma isiklikku ajavööndit muuta keskkonnamuutuja TZ häälestamise teel. Häälestuse puudumisel võetakse kasutusele süsteemi ajavöönd.

Käsk date esitab kuupäeva ja kellaaja (hoiduge käsust time, mis ei puuduta praegust aega, vaid käib protsesside kohta). Näiteks:

$ date
Sun Jul 13 21:53:41 EET DST 1997
$

See hetk on pühapäeval 13. juulil 1997 umbes kümme minutit enne kümmet ajavööndis nimega “EET DST” (mis on Ida-Euroopa sesooniaeg). Date võib esitada ka universaalaega:

$ date -u
Sun Jul 13 18:53:42 UTC 1997
$

Käsku date kasutatakse ka tuuma tarkvarakella seadmiseks:

# date 07132157
Sun Jul 13 21:57:00 EET DST 1997
# date
Sun Jul 13 21:57:02 EET DST 1997
#

Aega saab seada ainult juur. Kuigi igal kasutajal võib olla oma ajavöönd, siis kell on ikkagi kõigile sama.

Date näitab või seab ainult tarkvarakella. Käsk clock sünkroniseerib riist- ja tarkvarakellad. Teda kasutatakse süsteemi buutimisel riistvarakella lugemiseks ja tarkvarakella seadmiseks. Mõlema kella häälestamiseks seadke kõigepealt käsuga date tarkvarakell ja seejärel käsuga clock -w riistvarakell.

Käsu clock suvand -u ütleb, et riistvarakell näitab universaalaega. Suvandiga -u tuleb korrektselt töötada, st kui kasutasite teda riistvarakella seadmisel, siis peate kasutama ka lugemisel. Vastasel korral satub arvuti üsna varsti segadusse, mis siis ikkagi õige kellaaeg on.

Kelli peaks muutma ettevaatlikult. Mitmed Unix-süsteemi osad nõuavad, et kellad töötaksid korralikult. Näiteks deemon cron käivitab perioodiliselt programme. Kui te muudate kellaaega, võib deemonil tekkida kõhklusi, millal mõnda programmi käivitada. Ühes varasemas Unixi versioonis muutis keegi kella 20 aastat tulevikku ja cron üritas käivitada kõiki perioodilisi käske kahekümne aasta kohta korraga. Praegused cron-versioonid lahendavad sellise olukorra tavaliselt õigesti, aga peaksite siiski ettevaatlik olema. Suured hüpped tagasi on ohtlikumad kui väikesed hüpped ettepoole.

8.3 Kui kell on vale

Linuxi tarkvarakell pole alati õige. Teda hoiab käigus taimeri perioodiline katkestus, mille genereerib PC riistvara. Kui süsteemis töötab korraga liiga palju protsesse, võib taimeri katkestuse teenindamine liiga kaua aega võtta ja tarkvarakell hakkab taha jääma. Riistvarakell käib iseseisvalt ning on harilikult palju täpsem. Kui buudite arvutit tihti (enamik süsteeme peale serverite), hoiab ta üsna õiget aega.

Riistvarakella seadmiseks on tavaliselt lihtsam arvuti taaskäivitada, minna BIOS-e häälestuskuvale ja panna kellaaeg õigeks. See väldib muresid, mida süsteemiaja muutmine võib tekitada. Kui BIOS-e kasutamine pole võimalik, seadke uus aeg käskudega date ja clock (just selles järjekorras), kuid olge valmis arvutit taaskäivitama, kui mõni süsteemi osa hakkab imelikult käituma.

Võrgusolev arvuti, isegi kui ta on ühenduses läbi modemi, võib oma kella kontrollida automaatselt, võrreldes seda mõne teise arvuti (harilikult serveri) kellaga. Kui teine arvuti on tuntud väga täpse aja poolest, siis hoiavad mõlemad arvutid õiget aega. Mainitud ajakontrolli saab organiseerida käskude rdate ja netdate abil. Mõlemad käsud kontrollivad teise arvuti aega (netdate saab käsitseda mitut arvutit). Kui käivitate ühe neist käskudest regulaarselt deemoni cron abil, hoiab teie arvuti sama õiget aega nagu teine arvuti. Näiteks rida failis crontab

0 5 1 0 0   /usr/bin/rdate kell.ee; /sbin clock -wu

küsib kord nädalas õiget aega arvutist kell.ee ja seab selle järgi õigeks ka arvuti riistvarakella, mis omakorda hoiab universaalaega.