Ero sivun ”Komentojen ajastaminen” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
→Kerran ajettava työ: at
(17 välissä olevaa versiota 10 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
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. | <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 == | == Kerran ajettava työ: at == | ||
Yksinkertaisimmillaan voi testata komentoa: | Yksinkertaisimmillaan voi testata komentoa: | ||
Rivi 7: | Rivi 7: | ||
at now + 2 min | at now + 2 min | ||
tuloksena saat komentokehotteen 'at>'. Voit kirjoittaa siihen vaikkapa komennon "cal > kuukausi.txt" (ilman lainausmerkkejä). Paina enter ja sitten Ctrl | 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ä. | ||
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. | ||
== cron == | == Säännölliset työt: cron ja anacron == | ||
Cronilla | Cronilla voidaan ajoittaa toistuvia tapahtumia. Komento ''cron'' itsessään on ajastuksen teknisestä toteutuksesta huolehtiva [[taustaprosessi]], eikä sitä tarvitse käynnistää käsin. | ||
Cron ei aja komentoja - tietenkään - silloin kun tietokone ei ole käynnissä | 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''. | ||
Crontabia säädetään komennolla <tt>crontab -e</tt>. Tällöin crontab-tiedostosi aukeaa siihen editoriin, joka on määritelty | 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ää. | ||
=== Yleiset työt === | |||
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 65: | Rivi 87: | ||
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ä ja 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 | 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 * * * *". | ||
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 91: | Rivi 113: | ||
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. | |||
==Katso myös== | |||
*[[Ohjelmien käynnistäminen kirjauduttaessa sisään]] | |||
[[Luokka:Järjestelmä]] | [[Luokka:Järjestelmä]] | ||
[[Luokka: | [[Luokka:Ohjeet]] | ||
[[Luokka:Komentorivi]] | [[Luokka:Komentorivi]] |