Muokataan sivua Komentojen ajastaminen

Siirry navigaatioon Siirry hakuun
Varoitus: Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos kirjaudut sisään tai luot tunnuksen, muokkauksesi yhdistetään käyttäjänimeesi ja saat paremman käyttökokemuksen.

Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.

Nykyinen versio Oma tekstisi
Rivi 1: Rivi 1:
<tt>at</tt>-komennolla voit määrätä komentoja suoritettavaksi tietyn ajan kuluttua tai tiettynä ajankohtana, vaikkapa lähettää itsellesi sähköpostia kahden päivän ja kolmen tunnin kuluttua nykyhetkestä. <tt>cron</tt>-komennolla voi suorittaa jonkin komennon tai ohjelman säännöllisin väliajoin, esimerkiksi tehdä varmuuskopiot joka torstai kello 13.00. <tt>anacron</tt> hoitaa cronin ajamatta jääneet työt, kun kone laitetaan päälle. Kaikista komennoista on hyvät man-sivut, mutta tiettävästi suomenkielistä täydellistä esitystä komennoista ei ole.
at-komennolla voit määrätä komentoja suoritettavaksi tietyn ajan kuluttua, vaikkapa lähettää itsellesi sähköpostia kahden päivän ja kolmen tunnin kuluttua nykyhetkestä. cron-komennolla voi suorittaa jonkin komennon tai ohjelman säännöllisin väliajoin, esimerkiksi tehdä varmuuskopiot joka torstai kello 13.00. Kummastakin komennosta on hyvä man-sivu, mutta tiettävästi suomenkielistä täydellistä esitystä komennoista ei ole.


== Kerran ajettava työ: at ==
== at ==


Yksinkertaisimmillaan voi testata komentoa:
Yksinkertaisimmillaan voi testata komentoa


  at now + 2 min
  at now + 2 min


tuloksena saat komentokehotteen 'at>'. Voit kirjoittaa siihen vaikkapa komennon "cal > kuukausi.txt" (ilman lainausmerkkejä). Paina {{näppäin|enter}} ja sitten {{näppäin|Ctrl|D}} niin pääset takaisin komentotulkkiin. Nyt voit tarkistaa että tiedostoa kuukausi.txt ei vielä ole. Komennolla atq näet että työsi on odottamassa. Parin minuutin kuluttua tiedoston kuukausi.txt pitäisi ilmestyä.
tuloksena saat komentokehotteen 'at>'. Voit kirjoittaa siihen vaikkapa komennon "cal > kuukausi.txt" (ilman lainausmerkkejä). Paina enter ja sitten Ctrl+D niin pääset takaisin komentotulkkiin. Nyt voit tarkistaa että tiedostoa kuukausi.txt ei vielä ole. Komennolla atq näet että työsi on odottamassa. Parin minuutin kuluttua tiedoston kuukausi.txt pitäisi ilmestyä.


Saman asian kuin edellä voit tehdä putkea hyödyntäen:
Saman asian kuin edellä voit tehdä putkea hyödyntäen:
Rivi 47: Rivi 47:
at-työn voi poistaa komennolla atrm NN.
at-työn voi poistaa komennolla atrm NN.


== Säännölliset työt: cron ja anacron ==
== cron ==


Cronilla voidaan ajoittaa toistuvia tapahtumia. Komento ''cron'' itsessään on ajastuksen teknisestä toteutuksesta huolehtiva [[taustaprosessi]], eikä sitä tarvitse käynnistää käsin.
Cronilla siis voidaan ajoittaa toistuvia tapahtumia. Komento ''cron'' itsessään on ajatuksen teknisestä toteutuksesta huolehtiva [[daemoni]], eikä tavan käyttäjälle juuri tule tarvetta käyttää sitä. Ajastamiseen käytetään komentoa ''crontab'', joka käsittelee samannimistä asetustiedostoa. Tässä tuleekin huomata eräs [[man]]-komennon piirre; <tt>man crontab</tt> kertoo miten crontab-komento toimii. Sen sijaan mikäli halutaan tietoa crontab-tiedoston formaatista, täytyy manille kertoa myös mistä osastosta (section), halutaan crontab-niminen manuaalisivu, oikea komento tällöin on <tt>man 5 crontab</tt>.


Cron ei aja komentoja - tietenkään - silloin kun tietokone ei ole käynnissä, kun siinä ajetaan jotakin muuta käyttöjärjestelmää tai kun ajankohta puuttuu (kesäikaan siirtymisen takia). Se ei myöskään huolehdi siitä, että tällaisen tauon aikana tapahtumaan säädetyn työt tulisivat ajetuksi sen jälkeen, kun Linux taas käynnistetään. Jos näin halutaan tapahtuvan, pitää asentaa ''anacron''.
Cron ei aja komentoja - tietenkään - silloin kun tietokone ei ole käynnissä tai siinä ajetaan jotakin muuta käyttöjärjestelmää. Se ei myöskään huolehdi siitä, että tällaisen tauon aikana tapahtumaan säädetyn työt tulisivat ajetuksi sen jälkeen, kun Linux taas käynnistetään. Jos näin halutaan tapahtuvan, pitää asentaa ''anacron''.


Anacron huolehtii siis ajamatta jääneiden cron-töiden ajamisesta myöhemmin, kun tietokone on taas päällä. Sen asentaminen kannattaa, ellei kone yleensä ole päälle kaikki päivät vuorokauden ympäri. Oletusasetukset ovat yleensä riittävät, mutta erikoisemmassa käytössä (esimerkiksi jos käytössä on tärkeitä omia cron-töitä), sen olemassaolo voi olla hyvä huomioida skriptejä kirjoitettaessa. Myös viivettä koneen käynnistyksen ja töiden ajamisen välillä voi haluta säätää.
Crontabia säädetään komennolla <tt>crontab -e</tt>. Tällöin crontab-tiedostosi aukeaa siihen editoriin, joka on määritelty ympäristömuuttujassa EDITOR. Voit valita tämä käynnistämällä ohjelman lisämääreellä <tt>EDITOR=emacs crontab -e</tt>. Pysyvästi voit vaikuttaa tähän muuttujaan kirjoittamalla kotihakemistossasi olevaan ''.bashrc''-tiedostoon esimerkiksi rivin <tt>export EDITOR="editorisi_nimi"</tt>. Hyviä vaihtoehtoja ovat esimerkiksi ''vim'', ''emacs'' ja ''nano -w'' - jälkimmäisessä tulee asetustiedostoja ja muita vastaavia käytettäessä muistaa -w -valitsin, jottei Nano rivittämällä rikkoisi koodia.


=== Yleiset työt ===
(Jos emacs ei ole tuttu, laita sen tilalle esim. vi tai nano.) Tekstieditori avautuu. Kirjoita tiedostoon vain yksi rivi:
 
* * * * * date >> /tmp/aika
Tietokoneen toimintaan tai ylläpitoon kuuluvat säännölliset työt määrätään hakemistossa [[Asetustiedostot|<tt>/etc</tt>]] olevassa tiedostossa <tt>[[crontab]]</tt> (joka kutsuu alihakemistoissa <tt>cron.hourly</tt>, <tt>cron.daily</tt>, <tt>cron.weekly</tt> ja <tt>cron.monthly</tt> olevia skriptejä) sekä alihakemistossa <tt>cron.d</tt> olevissa tiedostoissa. Yleensä työt pyritään ajamaan öisin, kun kone on vähäisessä käytössä, mutta jollei halua koneen alkavan raksuttaa pikkutunneilla, aikoja voi muuttaa. <tt>/etc/crontab</tt> ja <tt>/etc/cron.d/*</tt> ovat muuten samassa muodossa kuin käyttäjien crontab-tiedostot, mutta ajankohdan ja komennon välissä määrätään minä käyttäjänä työ tulee ajaa.
 
Omat työt tai viittaukset niihin voi lisätä itse <tt>crontab</tt>iin mutta mielummin joko hakemistoon <tt>cron.d</tt> tai, jos ne on tarkoitus ajaa roottina tunnittain, päivittäin, viikottain tai kuukausittain, tätä vastaaviin hakemistoihin. Hakemistoissa ennestään olevia tiedostoja voi käyttää mallina.
 
=== Käyttäjien työt ===
 
Käyttäjien töiden ajastamiseen käytetään komentoa ''crontab'', joka käsittelee samannimistä asetustiedostoa. Tässä tuleekin huomata eräs [[man]]-komennon piirre; <tt>man crontab</tt> kertoo miten crontab-komento toimii. Sen sijaan mikäli halutaan tietoa crontab-tiedoston formaatista, täytyy manille kertoa myös mistä osastosta (section), halutaan crontab-niminen manuaalisivu, oikea komento tällöin on <tt>man 5 crontab</tt>.
 
Crontabia säädetään komennolla <tt>crontab -e</tt>. Tällöin crontab-tiedostosi aukeaa siihen editoriin, joka on määritelty [[ympäristömuuttuja]]ssa EDITOR. Voit valita tämän käynnistämällä ohjelman lisämääreellä, esimerkiksi <tt>[[env]] EDITOR=emacs crontab -e</tt>. Pysyvästi voit vaikuttaa tähän muuttujaan kirjoittamalla kotihakemistossasi olevaan ''.bashrc''-tiedostoon esimerkiksi rivin <tt>export EDITOR="editorisi_nimi"</tt>. Hyviä vaihtoehtoja ovat esimerkiksi ''vim'', ''emacs'' ja ''nano -w'' - jälkimmäisessä tulee asetustiedostoja ja muita vastaavia käytettäessä muistaa -w -valitsin, jottei Nano rivittämällä rikkoisi koodia.


=== Ajan esitysmuoto ===
=== Ajan esitysmuoto ===
*    *    *    *    *  suoritettava komento
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    └───── viikonpäivä (0 - 7) (0 tai 7 = sunnuntai)
│    │    │    └────────── kuukausi (1 - 12)
│    │    └─────────────── päivä (1 - 31)
│    └──────────────────── tunti (0 - 23)
└───────────────────────── minuutti (0 - 59)


Crontab-tiedoston rivi koostuu yleensä kahdesta kentästä, viisiosaisesta aikakentästä ja siitä komennosta, joka on tarkoitus ajastaa. Osat ovat järjestyksessä '''minuutti''', '''tunti''', '''kuukaudenpäivä''', '''kuukausi''' ja '''viikonpäivä''' - sunnuntai on sekä päivä 0 että 7.  Tähti tarkoittaa, että mikä tahansa arvo kelpaa, viisi tähteä siis asiaa joka tehdään joka minuutti (kannattaa tietenkin varmistua, ettei suoritettava asia kestä yli minuuttia!).
Crontab-tiedoston rivi koostuu yleensä kahdesta kentästä, viisiosaisesta aikakentästä ja siitä komennosta, joka on tarkoitus ajastaa. Osat ovat järjestyksessä '''minuutti''', '''tunti''', '''kuukaudenpäivä''', '''kuukausi''' ja '''viikonpäivä''' - sunnuntai on sekä päivä 0 että 7.  Tähti tarkoittaa, että mikä tahansa arvo kelpaa, viisi tähteä siis asiaa joka tehdään joka minuutti (kannattaa tietenkin varmistua, ettei suoritettava asia kestä yli minuuttia!).
Rivi 85: Rivi 66:
  30 7 13 * 5 mail -s 'Voi olla epäonnenpäivä' oma@osoite.example
  30 7 13 * 5 mail -s 'Voi olla epäonnenpäivä' oma@osoite.example


tarkoittaa että joka kuu ('*'), kun on 13. päivä ja perjantai ('5', viikon viides päivä), lähetetään meiliä kello 7:30 (minuutikenttä '30', tuntikenttä '7').
tarkoittaa että joka kuu ('*'), kun on 13. päivä tai perjantai ('5', viikon viides päivä), lähetetään meiliä kello 7:30 (minuutikenttä '30', tuntikenttä '7').


Yksinkertaisimmillaan aikakentän osa on pelkkä numero, eli "30 * * * *" tarkoittaa komentoa joka suoritetaan "aina puolelta". Se voi olla myös numeroluettelo tai aikaväli, "29,30,31 * * * *" ja "29-31 * * * *" tarkoittavat molemmat "puolelta sekä minuutti ennen ja jälkeen". Välejä voi luetellakin, "10-19,30-39,50-59 * * * *" suorittaisi komennon aina kymmenen kertaa minuutin välein ja pitäisi sitten kymmenen minuutin tauon. Tasavälienkin ilmaisemiseen on lyhennysmerkintä. "*/2 * * * *" tarkoittaa "tasan", "kaksi yli", "neljä yli" ja niin edelleen. "10-20/3 * * * *" on sama kuin "10,13,16,19 * * * *".
Yksinkertaisimmillaan aikakentän osa on pelkkä numero, eli "30 * * * *" tarkoittaa komentoa joka suoritetaan "aina puolelta". Se voi olla myös numeroluettelo tai aikaväli, "29,30,31 * * * *" ja "29-31 * * * *" tarkoittavat molemma "puolelta sekä minuutti ennen ja jälkeen". Välejä voi luetellakin, "10-19,30-39,50-59 * * * *" suorittaisi komennon aina kymmenen kertaa minuutin välein ja pitäisi sitten kymmenen minuutin tauon. Tasavälien kinilmaisemiseen on lyhennysmerkintä. "*/2 * * * *" tarkoittaa "tasan", "kaksi yli", "neljä yli" ja niin edelleen. "10-20/3 * * * *" on sama kuin "10,13,16,19 * * * *".


Kaikki nämä kentät voi yhdistää. Esimerkiksi "*/5 8-16 * * 1-5" tekisi jotain viiden minuutin välein "työaikaan", ts. maanantaista perjantaihin kello 8-16.
Kaikki nämä kentät voi yhdistää. Esimerkiksi "*/5 8-16 * * 1-5" tekisi jotain viiden minuutin välein "työaikaan", ts. maanantaista perjantaihin kello 8-16.
Rivi 113: Rivi 94:
Cronissa yleensä joko cron- tai crontab-ryhmään kuuluvilla käyttäjillä on oikeus käytää cronia. Tiedostossa /etc/cron.deny voidaan kuitenkin listata käyttäjiä, jotka kuuluvat kyseiseen ryhmään mutteivät saa käyttää cronia. Cron osaa käyttää pam-moduuleja, mutta aihetta ei käsitellä tässä tekstissä.
Cronissa yleensä joko cron- tai crontab-ryhmään kuuluvilla käyttäjillä on oikeus käytää cronia. Tiedostossa /etc/cron.deny voidaan kuitenkin listata käyttäjiä, jotka kuuluvat kyseiseen ryhmään mutteivät saa käyttää cronia. Cron osaa käyttää pam-moduuleja, mutta aihetta ei käsitellä tässä tekstissä.


Koneen yleiseen toimintaan ja ylläpitoon kuuluvat ajastetut komennot ovat tiedostossa /etc/crontab ja hakemistoissa /etc/cron.d/, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly ja /etc/cron/monthly.
at-komennolla ajastetut komennot on tallennettu hakemistoon /var/spool/at. Vastaavasti käyttäjien crontabit ovat hakemistossa /var/spool/cron. Kumpaankin hakemisoon lukuoikeus on vain rootilla.
at-komennolla ajastetut komennot on tallennettu hakemistoon /var/spool/at. Vastaavasti käyttäjien crontabit ovat hakemistossa /var/spool/cron. Kumpaankin hakemisoon lukuoikeus on vain rootilla.


'''Huom.!''' Crond ei aja /etc/cron.* -hakemistoissa olevia tiedostoja, jos niiden nimessä on piste. /etc/cron.daily/update.sh ei toimisi, mutta /etc/cron.daily/update toimisi. Katso [[man]] [[run-parts]] tai muu komento, jolla nämä ajetaan /etc/crontab-tiedostosta. cron ajaa itse tiedostot hakemistossa /etc/cron.d, mutta noudattaa ohjelman run-parts käytäntöä. Näin erilaiset varmuuskopiot (*~, *.bk, *.dpkg-dist *.rpmsave jne.) eivät aiheuta ongelmia. ”Sallitut” nimet vaihtelevat asetusten mukaan.
== Hahmotelmaa sisällöstä ==
 
 
* ympäristömuuttujat
* cron vs. anacron
* käyttö roottina vs. userina
* batch
* tyypilliset cron-ylläpitoajot
* /etc/at.deny ym. tiedostot


==Katso myös==
*[[Ohjelmien käynnistäminen kirjauduttaessa sisään]]


[[Luokka:Järjestelmä]]
[[Luokka:Järjestelmä]]
[[Luokka:Ohjeet]]
[[Luokka:Vinkit]]
[[Luokka:Komentorivi]]
[[Luokka:Komentorivi]]
Wikin materiaali on kaikkien vapaasti käytettävissä Creative Commons 3.0 - nimi mainittava -lisenssin alaisuudessa. TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!

Muokataksesi tätä sivua vastaa alla olevaan kysymykseen (lisätietoja):

Peruuta Muokkausohjeet (avautuu uuteen ikkunaan)