crond, crontab

teejuht

                                1. Sissejuhatus
                                2.Kuidas crond töötab
                                3. crontab'i süstaks'i selgitus
                                4. at
 

1. Sissejuhatus

Tihti on arvutis vaja perioodiliselt käivitada ühte või teist programmi. Musternäiteks on kasutajate kodukataloogide arhiveerimine. Või kui näiteks teie serveril on dial-up ühendus välismaailma püsiühendusega maili serveriga ning oluline on kirju vahetada kindlatel kellaagadel.

Aga võib ka rohkem nagu nalja pärast nt. iga veerandtunni tagant lasta arvutil ütelda mis kell on. Siis on küll vaja ka helikaarti, aga kellel tänapäeval helikaarti pole :)

Viimane aeg on ütleda, et OS'iga  suhteliselt standartsena kaasapandav bootmilsel käima tõmmatav vaim nimega crond tegeleb aja möödumise jälgimise ja sellele vastavalt reageerimisega. Kuidas konkreetselt reageerida vaatab crond järele nn. crontab'i failidest.
 

2. kuidas crond töötab

Iga kasutajaga on seotud crond'le olulises kataloogis /var/spool/cron/crontabs üks fail; too faili kannab kasutaja nime ja kasutajal on õigus selle sisu redigeerida. Siiski, selle sisu muudetakse mitte vahetult vaid käsuga crontab -e (fail on root'i oma; nagu /etc/passwd).

Ja ega vist root'ule pole kurjast aegajalt neid crontab faile sirvida. Mitte ehk sisulistel vaid tehnilistel kaalutlustel.
Seda saab teha näiteks

bash# crontab -l imre
 

Niisiis, crond kasutab nn. crontab'i faile, et teada kunas, millised ja kelle õigustes programm käivitada.

Oletame, et kasutaja imre tahab, et iga päev kell 11.45 hommikul mängiks arvuti muusikapala. Siis tuleb tal editeerida sellise sisuga crontab:

ut:~$ export VISUAL=/usr/bin/joe

ut:~$ crontab -e

45 11  * * * /usr/local/bin/mpg123 /usr/data/mp3/muusikapala.mp3

Siin kangemad mehed kes on harjunud kasutama vi'd ei puugi vaikimisi editoriks joe'd defineerida, aga mulle on veel nii harjumuspärasem.

Ja enne selgitusi ka teine näide:

Olgu soov kirjutada kuhugi faili mindil põhjusel iga 10 minuti tagant kes süsteemis sees on; näiteks põhjusel leida üles kõige suuremad kasutajad kuigi selleks on tõenäoliselt ka muid võimalusi.

*/10 *  * * * /usr/bin/w >> ~/keson
 
 

3. crontab'i süntaksi selgitus

Mulle oli see millegipärast pikka aega segane ja ega ma sellest eriti ka ei mõtelnud, ju mul polnud erilist huvi ega vajadust. Nüüd tekkis!

crontabis koosnevad sissekanded ridadest kus on nn. 6 välja (kokku mitte pikem kui 1 024 sümbolit reas)
 

#iga kuu 1. 10. ja 20. kuupäeval kul 2 hommikul; samuti esmaspäevadel
#väljund liita faili ~/kellaaeg
#minute   hour     day         month  dayofweek     command
#minut    tund     kuupäev     kuu    nädalapaev    käsk
 0        2        1,10,20     *        mon         date >> ~/kellaeg
 

kui näidata ära nii kuupäev kui ka nädalapäev siis need nö. OR'takse; st. tegevus sooritakse kui klapib kas nädalapäev või kuupäev või mõlemad.

Jga poole tunni tagant kogu aeg

#sama asi
minut    tund     päev     kuu    nädalapaev   käsk
 */30     *        *        *        *       date >> ~/kellaeg
 

#iga viie minuti tagant tööpäeviti
minut    tund     päev     kuu     nädalapaev    käsk
 */5      *        *        *       mon-fri      date >> ~/kellaeg
 

#iga päev kell 9:30, 10:30, ... 16:30 ja 21:30
minut    tund     päev     kuu    nädalapaev    käsk
 30   9-17/2,21    *        *         *         date >> ~/kellaeg 2>&1

Veel tuleb mainida, et viimases näites on kogu väljund st. ka võimalikud vead (stdoutja stderr) suunatud faili. Lugu on nii, et kui programmi täitmisel tekib stdout või stderr ning sellega midagi ette ei võeta siis saadetkse töö omanikule sendmail'iga kiri kus on too väljund sees.

Muide, crontab'i käsud on soovitav anda pika teega; nimelt kui crontab käivitab mõne programmi kasutaja õigustes, siis on PATH piiratum kui muidu kui kasutaja on end tavaliselt sisse loginud.

Lõpuks, kui crontab'i süntaks tundub olevat ebapiisav, siis alati on võimalik tõmmata crontab'ist esiteks script üles mis enne kõnealuse töö käivitamist teeb veel täiendava kontrolli arvuti koormuse ja aja suhtest, näiteks.
 

4. at

See on sarnase funktsiooniga programm (õigemini öeldes komplekt programme, aga tegelikult vist hard linke :) erinevusega, et sooritab ühekordselt ettemääratud töö tulevikus. Ilmselt saab ka nii, teha, et peale tolle töö sooritmise ta annab süsteemile teada uuest at'ist jne.

Aga käske antakse nii:

käskude fail 'kasud':

cal >> /home/imre/proov/kalender

(ehk on too fail igaks juhuks enne touch'iga hea valmis teha ja veenuda, et õigused on sobivad)

ning seejärel käsk

bash# at -f kasud now + 1 minute

näitab süsteemile, et läheb asi sappa (queue'sse)

ning nii saate näha mis tööd on queue's:

bash# atq
Date                    Owner   Queue   Job#
08:52:00 03/19/99       root    c       10
bash#
 

Seda kas kasutajatele ja kui siis millisetele kasutajatele anda at' imise õigus saab määrata failidega /etc/at.allow ja /etc/at.deny.

Aga eks te uuriga man'page't ja saate ise aru :)

Veel olgu märgitud, et at on vähemalt minu kogemuse järgi kaunis koba - jääb alati hiljeks 5 minutit. Niisiis, kososerakette sellega juhtida ei saa :(     Või äkki saab kah?

Queue'id on tegelikult a - z ja A- z, neil olla erinev prioriteet. Ka seda peaks arvestama.
 
 
 

dfdfd