Ero sivun ”Komentojen ajastaminen” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
→cron: - koitin saada hieman koherenssia ja lisäsin tietoa virroista ja anacronista.
p (ei enää yhteistyö) |
p (→cron: - koitin saada hieman koherenssia ja lisäsin tietoa virroista ja anacronista.) |
||
Rivi 49: | Rivi 49: | ||
== cron == | == cron == | ||
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ä 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''. | |||
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. | |||
(Jos emacs ei ole tuttu, laita sen tilalle esim. vi tai nano.) Tekstieditori avautuu. Kirjoita tiedostoon vain yksi rivi: | |||
* * * * * date >> /tmp/aika | |||
=== Ajan esitysmuoto === | |||
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!). | |||
Täten rivi | |||
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 | ||
Rivi 63: | Rivi 68: | ||
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'). | 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 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. | |||
Viikonpäivistä sunnuntain voi merkitä joko '0' tai '7'. Viikonpäivät ja kuukaudet voi merkitä lyhenteillä: "0 0 1 jan mon" ajaa komennon keskiyöllä joka tammikuun maanantai sekä aina uudenvuodenpäivänä. Välejä ei voi käyttää lyhenteiden kanssa, eli viikonpäivämerkintää 1-5 ei voi korvata merkinnällä mon-fri. | |||
Ainoa hankalasti muistettava asia on kuukaudenpäivän ja viikonpäivän yhdistelmä. Ne tulkitaan "tai" eikä "ja", eli cron ei osaa suoraan ajaa komentoja kun on sekä kuun 13. päivä että viikon 5. päivä eli perjantai. | |||
Useimmissa distroissa on oletuksena asennettu Vixie Cron, jossa viisiosaisen kentän voi halutessaan korvata valmiilla lyhenteellä, joita ovat @reboot (koneen käynnistyksen yhteydessä), @yearly tai @annually (vuoden vaihtuessa), @monthly (kuun vaihtuessa), @weekly (viikon vaihtuessa), @daily tai @midnight (keskiyöllä) tai @hourly (tunneittain). | |||
=== Komentojen tulosteet === | |||
Paitsi tekevät monia asioita, ajettavat komennot usein tulostavat jotakin vakiotuloste- tai virhevirtaan. Mikäli koneessa on toimivaksi säädetty sähköpostijärjestelmä, tuloste lähetetään käyttäjälle sähköpostillä. Tämän tarkoituksenmukaisuus tietenkin riippuu tapauksesta. Usein esimerkiksi on toivottavaa, että normaalisti käyttäjää ei vaivata, mutta jos jokin menee vikaan, voidaan virheilmoitus lähettää. Useat komennot eivät oletuksena tulostakaan mitään tai ne voidaan komentaa olemaan hiljaa, mutta mikäli ohjelma ei ole tällainen, voidaan sen syöte ohjata "roskiin" > -operaattorilla: | |||
@hourly /usr/bin/foobar 1> /dev/null | |||
Hieman uhkarohkeampi versio on ohjata roskiin myös virheilmoitukset: | |||
@hourly /usr/bin/foobar &> /dev/null | |||
== Tiedostot == | == Tiedostot == |