Cron & crontab, selitetty

Lucaine hän julkaisi jokin aika sitten erinomainen opetusohjelma cronista ja crontabista jonka mielestäni kannattaa jakaa. Cron on eräänlainen vastaava Windowsin ajoitetuille tehtäville, vain, että se käsitellään terminaalista. Ne, jotka haluavat visuaalisen käyttöliittymän saman tavoitteen saavuttamiseksi, voivat nähdä tämän toinen kohde.

Mikä on cron?

Nimi cron tulee kreikkalaisista chronosista, mikä tarkoittaa "aikaa". Unix-käyttöjärjestelmässä cron on säännöllinen taustaprosessien hallinta (daemon), joka suorittaa prosesseja tai komentosarjoja säännöllisin väliajoin (esimerkiksi joka minuutti, päivä, viikko tai kuukausi). Suoritettavat prosessit ja niiden suorittamisen ajankohta määritetään crontab-tiedostossa.

cómo teokset

Cron-daemon alkaa /etc/rc.d/ o /etc/init.d jakelusta riippuen. Cron juoksee taustalla, tarkistaa crontab-tehtävätaulukon joka minuutti / Etc / crontab vuonna / var / kela / cron etsimään suoritettavia tehtäviä. Käyttäjänä voimme lisätä komentoja tai komentosarjoja tehtävien kanssa croniin automatisoimaan joitain prosesseja. Tästä on hyötyä esimerkiksi järjestelmän päivityksen tai hyvän varmuuskopiointijärjestelmän automatisointiin.

Aiheeseen liittyvä artikkeli:
Opetusohjelma: Asenna .tar.gz- ja .tar.bz2-paketit

Mikä on Crontab?

Crontab on yksinkertainen tekstitiedosto, joka tallentaa luettelon suoritettavista komennoista käyttäjän määrittelemänä ajankohtana. Crontab tarkistaa päivämäärän ja kellonajan, jolloin komentosarja tai komento on suoritettava, suoritusoikeudet ja se tehdään taustalla. Jokaisella käyttäjällä voi olla oma crontab-tiedosto, itse asiassa / Etc / crontab sen oletetaan olevan pääkäyttäjän crontab-tiedosto, kun tavalliset käyttäjät (ja jopa root) haluavat luoda oman crontab-tiedoston, käytämme crontab-komentoa.

Crontab on helpoin tapa hallita cron-tehtäviä monen käyttäjän järjestelmissä joko yksinkertaisena järjestelmän käyttäjänä tai pääkäyttäjänä.

Crontabin käyttö

Aloitamme yksinkertaisella esimerkillä.

Aiomme automatisoida järjestelmän päivityksen poistamaan ärsyttävät "Minun täytyy aina päivittää enkä pidä siitä!"

Aiheeseen liittyvä artikkeli:
Komennot järjestelmän tuntemiseksi (laitteiston ja joidenkin ohjelmistokokoonpanojen tunnistaminen)

Ensinnäkin teemme käsikirjoituksen. Cron kutsuu tätä komentosarjaa ja sisältää kaikki haluamamme ohjeet, joten se on testattava useissa tapauksissa ja monin tavoin ennen sen sisällyttämistä croniin, yksinkertaiseen päivityskomentoon, kuten tämä:

#! / bin / bash #script-päivitysesimerkki #valitse jakelusi # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Poista # jakeluriviltäsi. Jos se on Ubuntu / Debian, se alkaa apt-get.

Tallennamme komentosarjan nimellä update.sh (esim. Komentosarjat hakemisto kotisi). Muutamme mainitun komentosarjan suoritusoikeudet seuraavilla tavoilla:

chmod a + x ~ / scripts / update.sh

Suoritamme komentosarjan muutaman kerran varmistaaksemme, että kaikki toimii sujuvasti, muokkaamme tarvittavaa (se ei saa sisältää virheitä, muuten cron toistaa virheen vain uudestaan ​​ja uudestaan). Nyt voit lisätä tehtävän crontabiin.

Lisää tehtäviä crontabiin

Suoritamme crontab-version crontab -e: llä, joissakin distroissa (kuten Ubuntu) se antaa meille mahdollisuuden valita haluamasi tekstieditori, loput jäävät vi. Crontab-tiedosto näyttää tältä.

# mh dom mon dow -komento

missä:

  • m vastaa komentosarjan suoritushetkeä, arvo vaihtelee 0: sta 59: een
  • h tarkka aika, 24 tunnin muoto käsitellään, arvot vaihtelevat 0: sta 23: een, 0 on 12:00 keskiyöllä.
  • lahja viittaa kuukauden päivään, esimerkiksi voit määrittää 15, jos haluat suorittaa 15 päivän välein
  • Dow tarkoittaa viikonpäivää, se voi olla numeerinen (0–7, missä 0 ja 7 on sunnuntai) tai päivän kolme ensimmäistä kirjainta englanniksi: ma, ti, ke, to, pe, la, su.
  • lähettämä määrittää käyttäjän, joka suorittaa komennon, se voi olla pääkäyttäjä tai toinen käyttäjä, kunhan heillä on käyttöoikeudet komentosarjan suorittamiseen.
  • komento viittaa komentoon tai komentosarjan absoluuttiseen polkuun suoritettavaksi, esimerkki: /home/usuario/scripts/update.sh, jos se kutsuu komentosarjaa, sen on oltava suoritettava

Muutama esimerkki selitetyistä cron-tehtävistä on selkeä:

15 10 * * * käyttäjä /home/usuario/scripts/update.sh

Se suorittaa päivityksen.sh komentosarjan joka päivä klo 10

15 22 * * * käyttäjä /home/usuario/scripts/update.sh

Se suorittaa päivityksen.sh komentosarjan joka päivä kello 10

00 10 * * 0 root apt-get -y -päivitys Root-käyttäjä

Se suorittaa päivityksen joka sunnuntai klo 10

45 10 * * sun root apt-get -y -päivitys

Root-käyttäjä suorittaa päivityksen joka sunnuntai (su) klo 10

30 7 20 11 * käyttäjä /home/usuario/scripts/update.sh

Käyttäjä suorittaa komentosarjan 20. marraskuuta kello 7

30 7 11 11 auringon käyttäjä /home/usuario/scripts/pastel_con_velitas.sh

11. marraskuuta kello 7 ja sunnuntaina käyttäjä juhlii sysadminiaan (eli minua)

01 * * * * käyttäjä /home/usuario/scripts/molestorecordatorio.sh

Ärsyttävä muistutus joka minuutti joka tunti joka päivä (EI suositella).

Niitä voidaan silti käsitellä erikoisalueet:

30 17 * * 1,2,3,4,5

Klo 5 iltapäivällä joka päivä maanantaista perjantaihin.

00 12 1,15,28 *

Klo 12 jokaisen kuukauden ensimmäisenä, viidentenätoista ja 28. päivänä (ihanteellinen palkanlaskentaan)

Jos tämä on hämmentävää, käsittele kahvat erityiset merkkijonot näiden alueiden määrittelemiseksi.

@reboot Suorita kerran, käynnistyksen yhteydessä
@vuosi kulkee vain kerran vuodessa: 0 0 1 1 *
@vuotta sama kuin @vuotta
@kuukausittain kerran kuukaudessa, ensimmäinen päivä: 0 0 1 * *
@ viikoittain viikoittain viikon ensimmäisen tunnin ensimmäinen minuutti. 0 0 * * 0 ″.
@ päivittäin päivittäin, klo 12 00 0 * * *
@ keskiyö sama kuin @ päivittäin
@ tunti tunnin välein: 0 * * * *

Sen käyttö on hyvin yksinkertaista.

@ tunti käyttäjä /home/user/scripts/molestorecordatorio.sh @kuukausittainen käyttäjä /home/user/scripts/backup.sh @ päivittäin root apt-get update && apt-get -y upgrade

Viimeinen mutta ei vähäisin:

Cronin työnhallinta

crontab-tiedosto

Korvaa olemassa oleva crontab-tiedosto käyttäjän määrittämällä tiedostolla

crontab -e

Muokkaa käyttäjän crontab-tiedostoa, jokainen uusi rivi on uusi crontab-tehtävä.

crontab -l

Luettele kaikki käyttäjän crontab-tehtävät

crontab -d

Poista käyttäjän crontab

crontab -c ohj

Määrittää käyttäjän crontab-hakemiston (sillä on oltava käyttäjän kirjoitus- ja suoritusoikeudet)

crontab -u-käyttäjä

etuliite toisen käyttäjän sivunäkymän käsittelemiseen, esimerkkejä:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user

Tämä työkalu, kuten monet muutkin, voidaan nähdä syvällisemmin ja yksityiskohtaisemmin:

Kiitos Lucain!

Artikkelin sisältö noudattaa periaatteita toimituksellinen etiikka. Ilmoita virheestä napsauttamalla täällä.

48 kommenttia, jätä omasi

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   Alvaro Ortiz paikkamerkki kuva dijo

    Uh ... vähän hämmentävää.

  2.   tonic dijo

    * / 30 puuttuu (minuuttikentässä), joka kulkee 30 minuutin välein ...

    1.    erm3nda dijo

      Juuri tätä aioin kommentoida, kunnes päätin tarkistaa kommentit 😀
      Tämä muokkaaja on erittäin tärkeä tieto ja jotain erittäin hyödyllistä.

      1.    Kika dijo

        Hei!
        Tällä hetkellä testaan ​​kokoonpanoa 45 minuutin välein.

        * / 45 * * * *, ja käsky suoritetaan 45 minuutin välein joka tunti JA joka tunti. Toisin sanoen:

        Se toimii klo 3:45, sitten 4:00, 4:45, sitten 5:00, 5:45, 6:00, 6:45 ja niin edelleen.

        Minulla on jotain vikaa? Mitä voin tehdä niin, että se tapahtuu vain 45 minuutin välein tai ainakin kerran 45 minuutin välein tunnissa.

    2.    Kika dijo

      Hei!
      Tällä hetkellä testaan ​​kokoonpanoa 45 minuutin välein.

      * / 45 * * * *, ja käsky suoritetaan 45 minuutin välein joka tunti JA joka tunti. Toisin sanoen:

      Se toimii klo 3:45, sitten 4:00, 4:45, sitten 5:00, 5:45, 6:00, 6:45 ja niin edelleen.

      Minulla on jotain vikaa? Mitä voin tehdä niin, että se tapahtuu vain 45 minuutin välein tai ainakin kerran 45 minuutin välein tunnissa.

  3.   New Rose Hotel dijo

    Hei erittäin hyödyllisiä tietoja sen selvittämiseksi, miten cron toimii.
    Tavua

  4.   New Rose Hotel dijo

    varten *

  5.   Metsästäjä dijo

    Erinomainen, kiitos kun selvitit kuinka cron toimii .. laitetaan pieni käsi 🙂

  6.   Jaakob dijo

    Ymmärtääkseni tämä rivi toteutetaan klo 10. Korjaa minut, jos olen väärässä
    No siinä sanotaan klo 10:15
    15 22 * * * käyttäjä /home/usuario/scripts/update.sh

  7.   Agustin dijo

    Hei! erittäin hyvä info.
    Jos komentosarja suoritetaan puolen tunnin välein, CronTabiin lisättävä rivi olisi: "30 * * * * root Scrip.sh" Oikea? Kiitos paljon!

  8.   käytetään Linuxia dijo

    Ei. Jos muistan oikein, sinun on lisättävä / 30 * * * * root Scrip.sh.
    Eli lisää / ennen 30.
    Kippis! Paul.

  9.   Jonathan dijo

    Hei, pidin viestistäsi, se on hyvin täydellinen, mutta halusin kysyä sinulta jotain.
    Minulla on ongelmia tämän komennon kanssa ja sellainen kuin "at".

    Haluan suorittaa komentosarjan tiettyyn aikaan ja laittaa

    at -f /home/mi_user/Desk/script.sh 18:08 example

    ja komentosarjaa ei suoriteta ruudulla, toisin sanoen päätelaitteessa, suoritetaanko se taustalla?

    Ja cronin kanssa sama tapahtuu minulle, muokkaan crontab-tiedostoa "crontab -e": llä

    lopussa lisätään tämän rivin:

    46 19 my_user /home/mi_user/Desk/script.sh

    ja se ei tee mitään, se ei näytä käsikirjoitusta.

    Ehdotuksia? Paljon kiitoksia ja anteeksi mahdollisista haitoista

    1.    käytetään Linuxia dijo

      Jotta pääte tulee näkyviin, joudut ehkä suorittamaan päätelaitteen ja välittämään komentosarjan parametrina.

      Esimerkiksi:

      lxterminal -e "my_user /home/my_user/Desk/script.sh"

      Käytettävä parametri voi vaihdella käyttämäsi pääteemulaattorin mukaan.

      Toivon, että se toimii.

      Halata! Paul.

  10.   patretkat dijo

    Panos on arvostettu.

    10 pistettä !!

    salu2!

  11.   Rodolfo dijo

    Paljon kiitoksia, se auttoi minua paljon selventämään joitain asioita, täydelliset kiitokset, lisätietoja tai epäilyksiä varten menen MAN-SIVULLE, toistivat terveiset.

  12.   Jahir dijo

    Setä kiitos paljon, olen lukenut ja testannut esimerkkejä. kiitos paljon ... se on hyvin ymmärrettävää. Kippis

  13.   Geovanni dijo

    Käytin ubuntu Server 12.04.2 LTS: ää ja käytössä olevaa crontab-versiota käyttäjän työluettelon poistamiseen käytetään crontab -r (ja -l, kuten tässä oppaassa sanotaan). Toki se on kysymys versioista.

    Toisaalta juoksin kerran vain crontab-sovelluksen ja annoin tällaisen antaa minun luoda oman suoritustiedoston, mutta tätä ei suoritettu. Suoritettava on tiedosto / etc / crontab. ehkä joku käyttää kommenttia.

    PS (Etsin lokalilla ja mistä crontab, mutta se palautti vain edellä mainitun osoitteen ja toisen salatun tiedoston, joten jos suoritettu oli / etc / crontab, mutta suoritettaessa crontab -e -komentoa, minun olisi ilmestyy kaikkien määrittelemieni töiden kanssa) missä tämä tiedosto tallennettiin '???? Terveiset. Kirjaudun sisään aina pääkäyttäjällä.

  14.   Sebastian dijo

    Erinomainen, erittäin hyödyllinen !!!

  15.   mmm dijo

    Hei, haluaisin tehdä tämän ………… «15 10 * * * root ifdown eth0»

    toisin sanoen verkkokortti sammuu tietyn ajan kuluttua ... ... hyvin, laitoin sen crontabiin ja se ei toiminut ... ... .. mitä kuuluu?

    Saludos y gracias

  16.   Miguel dijo

    Sinä unohdit määritellä "mon" otsikon "Lisää tehtäviä crontab" jälkeen

    Artikkeli on edelleen mukava, cron on erittäin hyödyllinen.

  17.   Oscar dijo

    Kuinka siistiä oli, että hyvä viesti, kysy minulta
    Jos haluan seurata tehtävien suorittamisen jättämiä tietueita, mistä voin nähdä ne?

    on päättää, että haluan nähdä tämän tiedoston aikaisemmin tehtyjen toimien historian ja haluan nähdä, kuka on muokannut sitä ja päivämäärä

    kiitos

  18.   oscar dijo

    Haluan tarkistaa tämän muokkaushistorian

    kuinka voin tehdä sen

    kiitos

  19.   Andres Ledo dijo

    Hyvää huomenta,

    Luulen, että olet tehnyt virheen ubuntu-komentosarjassa, olet asettanut ap-get -y -päivityksen apt-get -y -päivityksen sijaan. (Olet jättänyt t: n).

    Tervehdys.

    1.    käytetään Linuxia dijo

      Niin on. Kiitos!
      Halata! Paul

  20.   Gabriel dijo

    Haluan tietää, kuinka luoda cron-tiedosto voidaksesi määrittää jokaisen suorituksen ajankohdan, hakemiston jne.

  21.   Valentin dijo

    Kiitos, että selvitit toiminnon ja cronin peruskomennot nyt viihdyttämään itseäsi vähän.

  22.   Hiomakone dijo

    Aina kun etsin tietoa mistä tahansa Gnu / Linuxiin liittyvästä aiheesta, käyn ympäri ja löydän 90 prosentissa tapauksista parhaan opetusohjelman tässä upeassa yhteisössä, luulen tästä lähtien aloittavan täällä ja sitten muualla.

    terveiset

    1.    käytetään Linuxia dijo

      Kiitos Sander! Halaus! Paul.

  23.   Daryo dijo

    dom = kuukauden päivä
    dow = viikonpäivä
    se on helpompaa, jos olet mukana

  24.   Pascual dijo

    Kiitos paljon, erittäin kattava ja hyvin selitetty.

  25.   Maxillia dijo

    Tämä on sama asia, jonka käyttöjärjestelmän opettajani antoi meille, en muuta mitään, nyt ymmärrän miksi luokka on niin huono. - No, tämä on sama kuin kotitehtävät xD

  26.   Marcelo dijo

    Arvioitu,

    Kysely, voiko tehtävän kestoaikaa rajoittaa?
    Esimerkiksi minulla on tehtävä, joka toistuu 5 minuutin välein, toistamisen jälkeen, jos tehtävä on edelleen aktiivinen, tappaa se ja suorita uudelleen.

    Kiitos
    Marcelo. -

    1.    käytetään Linuxia dijo

      Hei, Marcelo!

      Mielestäni olisi parempi, jos ottaisit tämän kysymyksen esille kysymys- ja vastauspalveluumme Kysy FromLinuxilta jotta koko yhteisö voi auttaa sinua ongelmassasi.

      Halaus, Pablo.

  27.   aj dijo

    hyvä viesti.
    Mikä on komento terminaalia kohti tehtävien lisäämiseksi crontabiin (kirjoittamatta crontabiin ja lisäämällä ne manuaalisesti 'crontab -e': llä tai korvaamalla crontab toisella crontabilla 'crontab file': llä).
    Ajatuksena on luoda ulkoinen komentosarja tehtävien lisäämiseksi crontabiin
    kiitos

    1.    david dijo

      minusta tuntuu, että voit käyttää 'kaikua' mitä haluat lisätä '| kissa >> 'cronotab-polku (/ etc / cronotab)' «

  28.   Rafael Vera dijo

    Kuinka lauseke suoritettaisiin tarkalleen 3 päivän välein

  29.   José Antonio dijo

    Hei.

    Minulla on ongelma cron-työn suorittamisessa.

    Suoritan seuraavan tehtävän cronta -e: llä:

    01 * * * * juuri /home/user/script/mfile.sh

    mutta tehtävää ei suoriteta. Olen tarkistanut, että myfile.sh: llä on käyttöoikeus ja että sen suorittava käyttäjä on root.

    Suoritan saman tehtävän tiedostossa / etc / crontab ja palvelun uudelleenkäynnistyksen jälkeen se ei toimi myöskään minulle.
    Myfile.sh-sisältö on komento, joka päivittää tietokannan ja jos suoritan sen konsolissa, se toimii.
    mitään käsitystä siitä, mikä ongelma voi olla?

    1.    fredd dijo

      Todennäköisesti tietokannan käyttäjällä ei ole kaikkia käyttöoikeuksia ja sinun on ensin vietävä ympäristömuuttujat tietokantamoottoristasi.
      Esimerkiksi db2: ssä tämä rivi menisi komentosarjan alkuun
      . / home / db2inst1 / sqllib / db2profile

      Toinen syy voi olla, että komentosarja vaatii yhteyden tietokantaan, muodosta yhteys tietokantaan komentosarjassa

  30.   LA3 dijo

    En tiennyt, että minun oli aloitettava alusta uudelleen, olin taistellut tämän kanssa jonkin aikaa

  31.   Kenia dijo

    He tietävät kuinka osoittaa, että tehtävä suoritetaan joka kuukauden lopussa ilmoitettuna aikana. Yksityiskohta on, että en voi saavuttaa kuinka tiedän sen ottavan jokaisen kuukauden viimeisen päivän .. ??? Minun piti kirjoittaa ne yksitellen, mutta kun helmikuun loppu tulee, että se on biciesto, se on minulle monimutkaista.

  32.   Jeesus dijo

    hyvää päivää!!

    Kuinka voin lopettaa prosessin, joka suoritetaan sivuradalla?

  33.   Jeesus dijo

    käsitellä asiaa * …………

  34.   Julianna dijo

    Voisitko auttaa minua? Minun kirjoittama eu tenho um -käsikirjoitus, joka ei toimi, ei crontab! Jб dei kaikki sallitut henkilöt, ei yksityistä erityistä asiakasta tai käyttäjää, joka voi suorittaa sen - eniten mitään ei tapahdu! Haluaisin tietää, voitko auttaa minua, jotkut muut asiat eivät toimi! Vlws

  35.   Anthox dijo

    Kuinka laittaisit tehtävän suoritettavaksi joka kuukauden viimeisenä päivänä (päivät: 31-30-28)?

  36.   tfercho dijo

    Kuten jo tiedät, su-komentoa käytetään käyttäjän vaihtamiseen konsolissa. Jos käytän komentoa su näin: "käyttäjäsi" vaihtaa käyttäjää mutta ilman "käyttäjän" asetuksia, jos suoritan su nimellä "su - käyttäjä", vaihda käyttäjä lataamalla käyttäjäasetukset. Cron: llä ilmoitan käyttäjän, mutta miten voin ladata tämän käyttäjän asetukset?

  37.   Ryöstää dijo

    Ja jos haluan lopettaa sen?

  38.   regi dijo

    Hei,
    En tiedä mitä teen väärin, mutta noudatan ohjeita, eikä mitään suoriteta. Olen yrittänyt:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    eikä mitään. Se ei toteuta mitään. Olen käynnistänyt kaiken uudelleen.

  39.   Ferqos dijo

    kiitos paljon