Erinevus lehekülje "Crontab" redaktsioonide vahel

Allikas: Kuutõrvaja
 
(crontab'i süntaksi selgitus)
 
(ei näidata 2 kasutaja 24 vahepealset redaktsiooni)
1. rida: 1. rida:
'''crond, crontab'''
+
===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 kellaaegadel. Aga võib ka naljapärast näiteks iga veerandtunni tagant lasta arvutil ütelda, mis kell on. Selleks on vaja ka helikaarti, aga kellel tänapäeval helikaarti pole :)
  
                                Sissejuhatus
+
Viimane aeg on ütelda, et OS'iga suhteliselt standardsena kaasapandav bootimisel käimatõ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.
                                Kuidas crond töötab
 
                                crontab'i süstaks'i selgitus
 
                                at
 
 
   
 
   
 +
===Kuidas crond töötab===
  
'''Sissejuhatus'''
+
Iga kasutajaga on seotud crond'ile olulises kataloogis /var/spool/cron/crontabs üks fail, mis kannab kasutaja nime ja kasutajal on õigus selle sisu redigeerida. Selle sisu muudetakse mitte vahetult, vaid käsuga crontab -e (fail on root'i oma; nagu /etc/passwd).
  
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.
+
root'ile pole kurjast aeg-ajalt neid crontab faile sirvida, mitte sisulistel vaid tehnilistel kaalutlustel. Seda saab teha näiteks
  
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 :)
+
# crontab -l imre
  
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.
+
Niisiis, crond kasutab nn crontab'i faile, et teada kuna, millised ja kelle õigustes programm käivitada.
 
  
'''kuidas crond töötab'''
+
Oletame, et kasutaja imre tahab, et iga päev kell 11.45 hommikul mängiks arvuti muusikapala. Selleks tuleb tal luua sellise sisuga crontab:
  
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).
+
$ crontab -e
 
 
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:
 
  
$ export VISUAL=/usr/bin/joe
+
Ja sisestada:
 
 
$ crontab -e
 
  
 
  45 11  * * * /usr/local/bin/mpg123 /usr/data/mp3/muusikapala.mp3
 
  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:
 
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.
+
Olgu soov kirjutada kuhugi faili mingil põhjusel iga 10 minuti tagant, kes süsteemis sees on, kasvõi 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
 
  */10 *  * * * /usr/bin/w >> ~/keson
 
 
  
'''crontab'i süntaksi selgitus'''
+
===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)
 +
 +
#minut    tund    kuupäev    kuu    nädalapaev    käsk
 +
(0-59)    (0-23)  (1-31)    (1-12)  (0-7)        (mingi unixi/linuxi käsk)
  
crontabis koosnevad sissekanded ridadest kus on nn. 6 välja (kokku mitte pikem kui 1 024 sümbolit reas)
+
Nädalapäeva juures tasub silmas pidada, et 0 ja 7 on pühapäev, 1 on esmaspäev, 6 on laupäev jne. Crontabi rida mis iga kuu 1. 10. ja 20. kuupäeval kell 2 hommikul; samuti esmaspäevadel käivitab käsu "date" liites väljundi faili ~/kellaaeg näeb välja järgnev
 
  
#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
 
  #minute  hour    day        month  dayofweek    command
 
  #minut    tund    kuupäev    kuu    nädalapaev    käsk
 
  #minut    tund    kuupäev    kuu    nädalapaev    käsk
 
   0        2        1,10,20    *        mon        date >> ~/kellaeg
 
   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.
+
Kui näidata ära nii kuupäev kui ka nädalapäev, siis need nö OR'takse, st tegevus sooritatakse, kui klapib kas nädalapäev või kuupäev või mõlemad.
  
Jga poole tunni tagant kogu aeg
+
Iga poole tunni tagant kogu aeg
 +
minut    tund    päev    kuu    nädalapäev  käsk
 +
  */30    *        *        *        *      date >> ~/kellaeg
  
#sama asi
+
Iga tunni tagant
  minut    tund    päev    kuu    nädalapaev   käsk
+
  minut    tund    päev    kuu    nädalapäev   käsk
  */30     *        *        *        *      date >> ~/kellaeg
+
     0      *        *        *        *      date >> ~/kellaeg
 
  
#iga viie minuti tagant tööpäeviti
+
iga viie minuti tagant tööpäeviti
  minut    tund    päev    kuu    nädalapaev   käsk
+
  minut    tund    päev    kuu    nädalapäev   käsk
 
   */5      *        *        *      mon-fri      date >> ~/kellaeg
 
   */5      *        *        *      mon-fri      date >> ~/kellaeg
 
   
 
   
 +
iga päev kell 9:30, 10:30, ... 16:30 ja 21:30
 +
minut    tund    päev    kuu    nädalapäev    käsk
 +
  30  9-17/2,21    *        *        *        date >> ~/kellaeg 2>&1
  
#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.
+
Veel tuleb mainida, et viimases näites on kogu väljund, st ka võimalikud vead (stdoutja stderr), suunatud faili. Kui programmi täitmisel tekib stdout või stderr ning sellega midagi ette ei võeta, siis saadetakse töö omanikule sendmail'iga kiri, kus on see väljund sees.
 +
 
 +
Muide, crontab'i käsud on soovitav anda pika teega;, sest kui crontab käivitab mõne programmi kasutaja õigustes, siis on PATH piiratum kui muidu on kasutaja end tavaliselt sisse loginud.
 +
 
 +
Lõpuks, kui crontab'i süntaks tundub olevat ebapiisav, siis alati on võimalik tõmmata crontab'ist esiteks skript üles, mis enne kõnealuse töö käivitamist teeb näiteks veel täiendava kontrolli arvuti koormuse ja aja suhtest.
 +
 
 +
===Häälestus===
 +
 
 +
Vaikimisi saadetakse kõik croni skriptide poolt tekitatud teated administraatori mailile, selle väljalülitamiseks tuleb hääleka käsu järele monteerida
 +
 
 +
>/dev/null 2>&1
 +
 
 +
Kui cron teatab midagi sarnast
 +
 
 +
error: gpg required but not found!
 +
 
 +
Tuleb modiditseetida path muutujat, lisades sinna erinevaid algallikaid kust tarkvara otsitakse nt
 +
 
 +
PATH=/usr/bin:/usr/sbin:/usr/local/bin
 +
 
 +
Lisades crontabi algusse rea
 +
 
 +
MAILTO=myemailaddress@example.com
 +
 
 +
Saadetakse croni teated kindla(te)le mailiaadressitele (mailiaadressid tuleb eraldada komaga).
 +
 
 +
===Crontabi muutujad===
 +
 
 +
Crontab võimaldab kasutada regulaarsete tööde käivitamiseks ka muutujaid hourly, daily, yearly. Näiteks @daily käivitatakse iga kell 00:00.
 +
 
 +
Neile muutujatele vastavad järgnevad seadistused:
 +
 
 +
@yearly        0 0 1 1 *
 +
@daily        0 0 * * *
 +
@hourly        0 * * * *
 +
@reboot        Run at startup.
  
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.
+
Näiteks on võimalik kasutada @reboot käsku, et saata adminile teadet kui server tegi restardi:
  
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.
+
@reboot root echo "masin bootis" | /usr/bin/mail -s reboot katk@eenet.ee
 
  
'''at'''
+
===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.
+
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öö sooritamise ta annab süsteemile teada uuest at'ist jne.
  
 
Aga käske antakse nii:
 
Aga käske antakse nii:
95. rida: 112. rida:
 
  cal >> /home/imre/proov/kalender
 
  cal >> /home/imre/proov/kalender
  
(ehk on too fail igaks juhuks enne touch'iga hea valmis teha ja veenuda, et õigused on sobivad)
+
(ehk on too fail igaks juhuks hea enne touch'iga valmis teha ja veenduda, et õigused on sobivad)
  
 
ning seejärel käsk
 
ning seejärel käsk
101. rida: 118. rida:
 
  bash# at -f kasud now + 1 minute
 
  bash# at -f kasud now + 1 minute
  
näitab süsteemile, et läheb asi sappa (queue'sse)
+
näitab süsteemile, et asi läheb sappa (queue'sse)
  
ning nii saate näha mis tööd on queue's:
+
ning nii saate näha, mis tööd on queue's:
  
 
  bash# atq
 
  bash# atq
109. rida: 126. rida:
 
  08:52:00 03/19/99      root    c      10
 
  08:52:00 03/19/99      root    c      10
 
   
 
   
 +
Seda, kas kasutajatele ja kui, siis millistele kasutajatele, anda at' imise õigus, saab määrata failidega /etc/at.allow ja /etc/at.deny.
  
Seda kas kasutajatele ja kui siis millisetele kasutajatele anda at' imise õigus saab määrata failidega /etc/at.allow ja /etc/at.deny.
+
Queue'id on tegelikult a - z ja A- z. Neil on erinev prioriteet, mida peaks  samuti arvestama.
 
 
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?
+
* http://www.linuxhelp.net/guides/cron/
  
Queue'id on tegelikult a - z ja A- z, neil olla erinev prioriteet. Ka seda peaks arvestama.
+
* http://www.cyberciti.biz/faq/howto-restrict-at-cron-command-to-authorized-users/ crontabi turvakaalutlustel piiramine teatud kasutajatele.

Viimane redaktsioon: 19. november 2014, kell 02:19

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 kellaaegadel. Aga võib ka naljapärast näiteks iga veerandtunni tagant lasta arvutil ütelda, mis kell on. Selleks on vaja ka helikaarti, aga kellel tänapäeval helikaarti pole :)

Viimane aeg on ütelda, et OS'iga suhteliselt standardsena kaasapandav bootimisel käimatõ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.

Kuidas crond töötab

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

root'ile pole kurjast aeg-ajalt neid crontab faile sirvida, mitte sisulistel vaid tehnilistel kaalutlustel. Seda saab teha näiteks

# crontab -l imre

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

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

$ crontab -e

Ja sisestada:

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

Ja enne selgitusi ka teine näide:

Olgu soov kirjutada kuhugi faili mingil põhjusel iga 10 minuti tagant, kes süsteemis sees on, kasvõi 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

crontab'i süntaksi selgitus

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

#minut    tund     kuupäev    kuu     nädalapaev    käsk
(0-59)    (0-23)   (1-31)     (1-12)  (0-7)         (mingi unixi/linuxi käsk)

Nädalapäeva juures tasub silmas pidada, et 0 ja 7 on pühapäev, 1 on esmaspäev, 6 on laupäev jne. Crontabi rida mis iga kuu 1. 10. ja 20. kuupäeval kell 2 hommikul; samuti esmaspäevadel käivitab käsu "date" liites väljundi faili ~/kellaaeg näeb välja järgnev

#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 sooritatakse, kui klapib kas nädalapäev või kuupäev või mõlemad.

Iga poole tunni tagant kogu aeg

minut    tund     päev     kuu    nädalapäev   käsk
 */30     *        *        *        *       date >> ~/kellaeg

Iga tunni tagant

minut    tund     päev     kuu    nädalapäev   käsk
   0      *        *        *        *       date >> ~/kellaeg

iga viie minuti tagant tööpäeviti

minut    tund     päev     kuu     nädalapäev    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ädalapäev    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. Kui programmi täitmisel tekib stdout või stderr ning sellega midagi ette ei võeta, siis saadetakse töö omanikule sendmail'iga kiri, kus on see väljund sees.

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

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

Häälestus

Vaikimisi saadetakse kõik croni skriptide poolt tekitatud teated administraatori mailile, selle väljalülitamiseks tuleb hääleka käsu järele monteerida

>/dev/null 2>&1

Kui cron teatab midagi sarnast

error: gpg required but not found!

Tuleb modiditseetida path muutujat, lisades sinna erinevaid algallikaid kust tarkvara otsitakse nt

PATH=/usr/bin:/usr/sbin:/usr/local/bin

Lisades crontabi algusse rea

MAILTO=myemailaddress@example.com

Saadetakse croni teated kindla(te)le mailiaadressitele (mailiaadressid tuleb eraldada komaga).

Crontabi muutujad

Crontab võimaldab kasutada regulaarsete tööde käivitamiseks ka muutujaid hourly, daily, yearly. Näiteks @daily käivitatakse iga kell 00:00.

Neile muutujatele vastavad järgnevad seadistused:

@yearly        0 0 1 1 *
@daily         0 0 * * *
@hourly        0 * * * *
@reboot        Run at startup.

Näiteks on võimalik kasutada @reboot käsku, et saata adminile teadet kui server tegi restardi:

@reboot root echo "masin bootis" | /usr/bin/mail -s reboot katk@eenet.ee

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öö sooritamise 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 hea enne touch'iga valmis teha ja veenduda, et õigused on sobivad)

ning seejärel käsk

bash# at -f kasud now + 1 minute

näitab süsteemile, et asi läheb 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

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

Queue'id on tegelikult a - z ja A- z. Neil on erinev prioriteet, mida peaks samuti arvestama.