close

Cron (Unix)

Siirry navigointiin Siirry hakuun

Unix - käyttöjärjestelmässä cron on tavallinen taustaprosessinhallinta ( daemon ) , joka suorittaa prosesseja tai komentosarjoja säännöllisin väliajoin (esimerkiksi minuutin, päivän, viikon tai kuukauden välein). Prosessit, jotka pitäisi suorittaa, ja aika, jolloin ne tulee suorittaa, on määritetty . Nimi cron tulee kreikan sanasta chronos (χρόνος), joka tarkoittaa "aikaa". crontab

Cron voidaan määritellä vastaavaksi Windows Scheduled Tasks .

Yleiskatsaus

Cronin käynnistää crond , määritystiedosto, joka määrittää komentotulkkikomennon , joka suoritetaan määräajoin tiettynä aikana. Crontab - tiedostot tallennetaan sinne, missä työluettelot ja muut cron-demonin ohjeet säilyvät. Käyttäjät, joilla on oikeus luoda crontab -tiedostosi , määritetään cron.allow- tiedostossa . Samoin ne, jotka eivät ole sallittuja, luetellaan cron.denyssä. Nämä kaksi viimeistä tiedostoa sijaitsevat hakemistossa /etc/cron.d/ tai /etc/ riippuen Unix -versiosta .

Jokainen crontab-tiedoston rivi edustaa työtä ja koostuu CRON-lausekkeesta, jota seuraa suoritettava komentotulkkikomento . Jotkut cronin toteutukset, kuten suosittu BSD 4. painos , jonka on kirjoittanut Paul Vixie ja jotka sisältyvät moniin Linux -jakeluihin , lisäävät muotoon käyttäjänimen määrittelyn kuudenneksi kenttään, kuten kuka suorittaa määritetyn työn (olemassaolo /etc/passwd ja valtuutetut käyttöoikeudet) . Tämä on sallittua vain crontab-järjestelmässä (/etc/crontab ja /etc/cron.d/*), ei muissa, joissa jokainen käyttäjä on määritetty kokoonpanoon.

"Viikonpäivälle" (kenttä 5) sekä 0 että 7 katsotaan sunnuntaiksi, vaikka jotkin Unix -versiot , kuten AIX , eivät pidä "7":ää kelvollisena man -sivun mukaan . Vaikka työ suoritetaan normaalisti, kun aika/päivämäärä-kentät määritettiin, ne kaikki vastaavat nykyistä päivämäärää ja aikaa, tämä on poikkeus.

Jos sekä "kuukauden päivä" että "viikonpäivä" on rajoitettu (ei " * " ), joko "kuukauden päivä" (kenttä 3) tai "viikonpäivä" (kenttä 5) on vastattava nykyistä päivää.

Crontab -tiedostomuoto

Esimerkki crontab-tiedostosta:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=juuri
KOTI=/

# ajo-osaa
01 * * * * root nice -n 19 run-parts /etc/cron.hourly
50 0 * * * root nice -n 19 run-parts /etc/cron.daily
22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly
42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly

Jos haluat lisätä, poistaa tai muokata tehtäviä, sinun on muokattava crontabia. Tämä tehdään komennolla crontab -e , joka avaa EDITOR - ympäristömuuttujassa määritellyn editorin ja lataa sisäänkirjautunutta käyttäjää vastaavan crontab -tiedoston.

Joka kerta kun crontab ajetaan, käyttäjälle lähetetään viesti, joka näkyy MAILTO- ympäristömuuttujassa , jos se on käytössä, ja osoittaa suoritetun tehtävän.


Apache-virheloki katkaistaan ​​sitten minuutti puolenyön jälkeen (00:01 jokaisena kuukauden päivänä, jokaisena viikonpäivänä).

1 0 * * * echo -n "" > /www/apache/logs/error_log

Komentosarja suoritetaan sitten: /home/user/test.pl 5 minuutin välein.

*/5 * * * * /home/user/test.pl
.--------- minuutti (0-59)
| .------------ tunti (0-23)
| | .--------- kuukauden päivä (1-31)
| | | .------ kuukausi (1-12) tai tammi, helmi, maalis, huhtikuu, toukokuu, kesä, heinäkuu... (kuukausi englanniksi)
| | | | .--- viikonpäivä (0-6) (sunnuntai=0 tai 7) tai su,ma,ti,ke,to,pe,la (päivät englanniksi)
| | | | |
* * * * * -komento suoritetaan

Huomautus: ympäristömuuttujia ei tueta


Syntaksi

cron-määritysmuoto on hyvin yksinkertainen.

  • Hash-symboli "#" on kommentti, cron ei suorita mitään tämän merkin jälkeen .
  • Suoritusaika määritetään seuraavan taulukon mukaan:
  1. Minuutit: (0-59)
  2. Aukioloajat: (0-23)
  3. Päivät: (1-31)
  4. Kuukausi: (1-12)
  5. Viikonpäivä: (0-6), jossa 1=maanantai, 2=tiistai,... 6=lauantai ja 0=sunnuntai (joskus myös 7=sunnuntai)
################################################# #########
#minuutti (0-59), #
#| tunti (0-23), #
#| | kuukauden päivä (1-31), #
#| | | kuukausi (1-12), #
#| | | | viikonpäivä (0-6, jossa 0 = sunnuntai) #
#| | | | | komennot #
################################################# #########
15 02 * * *
Asteriskia (*) käytetään määrittämään muuttujan kaikki mahdolliset arvot .
  • Viimeinen sarake vastaa suoritettavan binaarin tai komentosarjan absoluuttista polkua .

Esimerkkejä

Esimerkiksi:

30 10 * * 1 /usr/bin/who >> /var/log/usuarios.txt

Suorita who -komento joka maanantai klo 10.30 ja tallenna tulos tiedostoon users.txt

Kahden tai useamman arvon määrittämiseksi kussakin muuttujassa ne on erotettava pilkuilla yllä olevan esimerkin mukaisesti:

0,30 * * * 1 /usr/bin/who >> /var/log/usuarios.txt

Suorita who-komento joka maanantai puolen tunnin välein ja tallenna tulos tiedostoon users.txt

Jos haluamme sen toimivan 15 minuutin välein, se olisi

0,15,30,45 * * * * /usr/bin/who >> /var/log/usuarios.txt

jompikumpi

*/15 * * * * /usr/bin/who >> /var/log/usuarios.txt

Tässä esimerkissä näemme, kuinka useampi kuin yksi komento välitetään cronille ja miten lataus voidaan ajoittaa:

30 21 * * * cd /media/sda7/dexter/distributions/isos;wget http://example.com/archivo_a_descargar.loquesea

Tämä toinen on ohjelmoida tietokoneen sammutus. Tässä tapauksessa joka lauantai klo 21.30.

30 21 * * 6 /sbin/shutdown -h now

Muokkaa tietyn käyttäjän crontabia

crontab [ -u user ] -tiedosto

crontab [ -u käyttäjä ] { -l | -r | -e}

Vaihtoehtoa -u käytetään osoittamaan käyttäjän crontab, jota haluamme hallita. Vain pääkäyttäjä voi käyttää crontab-komentoa tällä valinnalla.

-e-vaihtoehtoa käytetään sen muokkaamiseen

Ennalta määritettyjen aikataulujen määritelmä

On olemassa useita ennalta määritettyjä arvoja, joita voidaan käyttää korvaamaan CRON-lauseke.

Sisäänpääsy Kuvaus Yhtä
@yearly Juokse kerran vuodessa 0 0 1 1 *
@annually (sama kuin @yearly) 0 0 1 1 *
@monthly Juokse kerran kuukaudessa 0 0 1 * *
@weekly Juokse kerran viikossa 0 0 * * 0
@daily Juoksee kerran päivässä 0 0 * * *
@midnight (sama kuin @daily) 0 0 * * *
@hourly Käynnistyy kerran tunnissa 0 * * * *

Saatavilla on myös @reboot, jonka avulla työ voidaan suorittaa kerran joka kerta, kun cron-daemon käynnistetään, mikä yleensä osuu samaan aikaan palvelimen käynnistyksen kanssa. Tästä voi olla hyötyä, jos on tarpeen käynnistää palvelin tai demoni tietyn käyttäjän alaisuudessa tai jos käyttäjällä ei ole oikeuksia rc.d/init.d -tiedostoon .

Aikavyöhykkeiden manipulointi

Monet cron-toteutukset yksinkertaisesti tulkitsevat crontab-merkinnät järjestelmän aikavyöhykeasetuksissa sen perusteella, mitä demoni asettaa suoritettaessa. Tämä voi olla ristiriitojen lähde, jos suurilla usean käyttäjän tiimillä on käyttäjiä useilla aikavyöhykkeillä, varsinkin jos oletusaikavyöhykejärjestelmä sisältää mahdollisesti hämmentävän kesäajan . Siten cron-toteutuksessa voi olla mikä tahansa erikoistapaus "TZ=<aikavyöhyke>" ympäristömuuttujan asetusrivejä käyttäjän crontabissa, joka tulkitsee suhteellisia crontab-merkintöjä aikavyöhykkeen jälkeen. [ 1 ]

Historia

Varhaiset versiot

Brian Kernighanin kirjoittama Unix-version 7 Cron oli järjestelmäpalvelu (myöhemmin nimeltään daemon ), joka kutsuttiin, kun käyttöjärjestelmä meni usean käyttäjän tilaan. Tämä algoritmi oli yksinkertainen: /etc/inittab

  1. Lukea/usr/etc/crontab
  2. Selvitä, olivatko komennot käynnissä nykyisenä päivämääränä ja kellonaikana ja toimivatko ne pääkäyttäjänä .
  3. Keskeytä minuutin ajan
  4. Toista vaihe 1.

Tämä cronin versio oli perus- ja vankkaversio, mutta se vei myös resursseja riippumatta siitä, löytyikö se mitään tehtävää tai ei; Kuultuaan tämän kuvauksen Douglas Comer , Purduen yliopiston professori , huomautti: "Ah, lyhytmuistin algoritmi." Purduen yliopistossa 1970-luvun lopulla tehdyssä kokeilussa cron-palveluiden laajentamiseksi kaikille 100 käyttäjälle VAX -aikaosuudella , joka sijaitsi korkean järjestelmän kuormituksen alueella.

Monen käyttäjän ominaisuus

Seuraava cron-versio System V -julkaisulla luotiin laajentamaan cronin ominaisuuksia kaikkiin Unix-järjestelmän käyttäjiin, ei vain pääkäyttäjään (tai superkäyttäjään). Vaikka tämä voi olla nykyään triviaalia useimmissa Unix- ja Unix-tyyppisissä järjestelmissä, joissa on tehokkaat prosessorit ja pieni määrä käyttäjiä, tällä hetkellä se vaatii uutta lähestymistapaa 1 MIPS -järjestelmässä, jossa on noin 100 käyttäjätiliä.

Nykyaikaiset versiot

GNU- ja Linux -projektin edulla ilmestyi uusi cron. Merkittävin tästä on Vixie cron, jonka alun perin koodasi Paul Vixie vuonna 1987. Vixie cronin versio 3 julkaistiin vuoden 1993 jälkeen. Versio 4.1 nimettiin uudelleen ISC (Internet System Consortium) Croniksi ja se julkaistiin tammikuussa 2004. Versio 3, jossa on pieni virhe korjauksia, käytetään useimmissa GNU/Linux- ja BSD-jakeluissa.

Vuonna 2007 RedHat liitti cron-vixie 4.1:n cronie-projektiin ja sisällytti anacron 2.3:n vuonna 2009.

Muita suosittuja toteutuksia ovat anakron ja fcron . Anacron ei kuitenkaan ole erillinen cron-ohjelma; se luottaa siihen, että toinen cron-ohjelma kutsuu sitä suorittaakseen.

Viitteet

  1. ^ "Sun.com" . Arkistoitu alkuperäisestä 5. elokuuta 2009 . Haettu 28. huhtikuuta 2010 . 

Ulkoiset linkit