Cron & crontab, forklart

Lucaine publisert en stund siden utmerket opplæring om cron og crontab som jeg synes er verdt å dele. Cron er et slags tilsvar til planlagte oppgaver i Windows, bare at den håndteres fra terminalen. De som foretrekker et visuelt grensesnitt for å oppnå samme mål, kan se dette et annet element.

Hva er Cron?

Navnet cron kommer fra gresk chronos som betyr "tid". På Unix-operativsystemet er cron en vanlig bakgrunnsprosessbehandling (daemon) som kjører prosesser eller skript med jevne mellomrom (for eksempel hvert minutt, dag, uke eller måned). Prosessene som må kjøres og tidspunktet de må kjøres er spesifisert i crontab-filen.

COMO verk

Cron-demonen starter fra /etc/rc.d/ o /etc/init.d avhengig av fordelingen. Cron løper i bakgrunnen, sjekker crontab-oppgavetabellen hvert minutt / etc / crontab o en / var / spole / cron på jakt etter oppgaver som skal utføres. Som bruker kan vi legge til kommandoer eller skript med oppgaver for å cron for å automatisere noen prosesser. Dette er nyttig for eksempel for å automatisere oppdateringen av et system eller et godt backupsystem.

Relatert artikkel:
Opplæring: Installer pakker .tar.gz og .tar.bz2

Hva er Crontab?

Crontab er en enkel tekstfil som lagrer en liste over kommandoer som skal utføres på et tidspunkt spesifisert av brukeren. Crontab vil verifisere datoen og klokkeslettet skriptet eller kommandoen skal utføres, utførelsestillatelsene og det vil gjøre det i bakgrunnen. Hver bruker kan ha sin egen crontab-fil, faktisk / etc / crontab det antas å være rotbrukerens crontab-fil, når vanlige brukere (og til og med root) vil generere sin egen crontab-fil, vil vi bruke crontab-kommandoen.

Crontab er den enkleste måten å administrere cron-oppgaver på flerbruker-systemer, enten som en enkel systembruker eller rotbruker.

Bruke crontab

Vi begynner med et enkelt eksempel.

Vi skal automatisere oppdateringen av et system, for å eliminere det irriterende "Jeg må alltid oppdatere og det liker jeg ikke!"

hvordan
Relatert artikkel:
Kommandoer for å kjenne systemet (identifisere maskinvare og noen programvarekonfigurasjoner)

Først og fremst skal vi lage et manus. Dette skriptet vil bli kalt av cron og vil inneholde alle instruksjonene vi vil at det skal gjøres, derfor er det nødvendig å teste det i flere tilfeller og på flere måter før du inkluderer det i cron, et enkelt oppdateringsskript som dette:

#! / bin / bash #skriptoppdateringseksempel #Velg distribusjonen din # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Fjern # fra distrolinjen. I tilfelle det er Ubuntu / Debian, begynner det med apt-get.

Vi lagrer skriptet som update.sh (f.eks. Skriptkatalog ditt hjem). Vi endrer utførelsestillatelsene for nevnte skript med:

chmod a + x ~ / scripts / update.sh

Vi kjører skriptet et par ganger for å bekrefte at alt går greit, vi endrer det som er nødvendig (det skal ikke inneholde feil, ellers vil cron bare gjenta en feil igjen og igjen). Nå for å legge til oppgaven i crontab.

Legg til oppgaver i crontab

Vi kjører utgaven av crontab med crontab -e, i noen distroer (som Ubuntu) gir det oss muligheten til å velge tekstredigereren vi ønsker, resten vi har igjen med vi. Crontab-filen vil se omtrent slik ut.

# mh dom mon dow brukerkommando

der:

  • m tilsvarer det øyeblikket skriptet kjøres, varierer verdien fra 0 til 59
  • h det nøyaktige tidspunktet, 24-timersformatet håndteres, verdiene varierer fra 0 til 23, med 0 som 12:00 XNUMX:XNUMX.
  • gave refererer til dagen i måneden, for eksempel kan du spesifisere 15 hvis du vil kjøre hver 15. dag
  • dow betyr ukedagen, den kan være numerisk (0 til 7, der 0 og 7 er søndag) eller de første 3 bokstavene på dagen: man, ti, ons, torsdag, fre, lørdag, sol.
  • bruker definerer brukeren som skal utføre kommandoen, den kan være root eller en annen bruker så lenge de har tillatelse til å utføre skriptet.
  • kommando refererer til kommandoen eller den absolutte banen til skriptet som skal utføres, eksempel: /home/usuario/scripts/update.sh, hvis det kaller et skript, må det være kjørbart

For å være tydelig forklarte noen få eksempler på cron-oppgaver:

15 10 * * * bruker /hjem / bruker / skripter / oppdatering.sh

Den kjører update.sh-skriptet klokka 10:15 hver dag

15 22 * * * bruker /hjem / bruker / skripter / oppdatering.sh

Den kjører update.sh-skriptet klokken 10 hver dag

00 10 * * 0 root apt-get -y oppdatering Rotbruker

Den kjører en oppdatering hver søndag klokka 10

45 10 * * sun root apt-get -y oppdatering

Rotbrukeren kjører en oppdatering hver søndag (søn) kl 10:45

30 7 20 11 * bruker /home/usuario/scripts/update.sh

20. november klokken 7:30 kjører brukeren skriptet

30 7 11 11 solbruker /home/usuario/scripts/pastel_con_velitas.sh

11. november klokka 7:30 og det er søndag, vil brukeren feire sysadminen min (det vil si meg)

01 * * * * bruker /home/usuario/scripts/molestorecordatorio.sh

En irriterende påminnelse hvert minutt hver time hver dag (IKKE anbefalt).

De kan fortsatt håndteres spesielle områder:

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

5:30 på ettermiddagen hver dag fra mandag til fredag.

00 12 1,15,28 * *

Klokka 12 hver første, femtende og 28. i hver måned (ideell for lønn)

Hvis dette er forvirrende, må du håndtere crontab spesielle strenger for å definere disse områdene.

@reboot Kjør en gang, ved oppstart
@årlig kjører bare en gang i året: 0 0 1 1 *
@ hvert år det samme som @ årlig
@monthly kjører en gang i måneden, den første dagen: 0 0 1 * *
@weekly Weekly det første minuttet i den første timen i uken. 0 0 * * 0 ″.
@ daglig hver dag, klokken 12:00. 0 0 * * *
@ midnight same as @daily
@hourly i første minutt av hver time: 0 * * * *

Bruken er veldig enkel.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Sist men ikke minst:

Cron jobbadministrasjon

crontab-fil

Erstatt eksisterende crontab-fil med en brukerdefinert fil

crontab -e

Rediger brukerens crontab-fil, hver nye linje vil være en ny crontab-oppgave.

crontab-l

Liste over alle brukerens crontab-oppgaver

crontab -d

Slett brukerens crontab

crontab -c dir

Definerer brukerens crontab-katalog (dette må ha brukerens skrive- og utføre tillatelser)

crontab -u bruker

prefiks for å håndtere crontab av en annen bruker, eksempler:

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

Dette verktøyet, som mange andre, kan sees nærmere og mer detaljert i:

Takk Lucain!

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Bilde av Alvaro Ortiz sa

    Ugh ... litt forvirrende.

  2.   tonic sa

    * / 30 mangler (i minuttsfeltet) som går hvert 30. minutt ...

    1.    erm3nda sa

      Jeg skulle bare kommentere dette til jeg bestemte meg for å gå gjennom kommentarene 😀
      Denne modifisereren er en veldig viktig informasjon og noe veldig nyttig.

      1.    Kika sa

        Hei!
        Akkurat nå tester jeg en konfigurasjon hvert 45. minutt.

        * / 45 * * * *, og instruksjonene utføres 45 minutter hver time OG hver time. Det er å si:

        Den kjører kl. 3:45, deretter kl. 4:00, 4:45, deretter 5:00, 5:45, 6:00, 6:45 og så videre.

        Jeg har noe galt? Hva kan jeg gjøre for å lage det bare hvert 45. minutt, eller minst en gang på 45 minutter hver time?

    2.    Kika sa

      Hei!
      Akkurat nå tester jeg en konfigurasjon hvert 45. minutt.

      * / 45 * * * *, og instruksjonene utføres 45 minutter hver time OG hver time. Det er å si:

      Den kjører kl. 3:45, deretter kl. 4:00, 4:45, deretter 5:00, 5:45, 6:00, 6:45 og så videre.

      Jeg har noe galt? Hva kan jeg gjøre for å lage det bare hvert 45. minutt, eller minst en gang på 45 minutter hver time?

  3.   Slack sa

    Hei, informasjonen for å avklare hvordan cron fungerer er veldig nyttig.
    Bytes

  4.   Slack sa

    for *

  5.   Jeger sa

    Utmerket, takk for at du avklarte hvordan cron fungerer .. la oss legge litt hånd 🙂

  6.   Jacob sa

    Denne linjen, slik jeg forstår, vil bli utført kl 10, rett meg hvis jeg tar feil
    Vel der står det 10:15
    15 22 * * * bruker /hjem / bruker / skripter / oppdatering.sh

  7.   Agustin sa

    Hallo! veldig god info.
    For å utføre et skript hver halvtime, vil linjen som skal legges til CronTab være: "30 * * * * root Scrip.sh" Riktig? Tusen takk!

  8.   la oss bruke linux sa

    Nei. Hvis jeg husker riktig, må du sette / 30 * * * * root Scrip.sh for det.
    Det vil si, legg til / før 30.
    Jubel! Paul.

  9.   Jonathan sa

    Hei, jeg likte innlegget ditt, det er veldig komplett, men jeg ønsket å spørre deg om noe.
    Jeg har problemer med denne kommandoen og en som "at".

    Jeg vil kjøre et skript på et bestemt tidspunkt og sette

    på -f /home/mi_user/Desk/script.sh 18:08 eksempel

    og skriptet blir ikke utført på skjermen, det vil si i terminalen, kjøres det i bakgrunnen?

    Og med cron skjer det samme med meg, jeg redigerer crontab-filen med "crontab -e"

    på slutten legger jeg til denne linjen:

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

    og det gjør ingenting, det viser ikke manuset.

    Noen forslag? Tusen takk og beklager eventuelle ulemper dette medfører

    1.    la oss bruke linux sa

      For at terminalen skal vises, må du kanskje kjøre terminalen og sende skriptet som en parameter.

      For eksempel:

      lxterminal -e "my_user /home/mi_user/Desktop/script.sh"

      Parameteren som skal brukes, kan variere avhengig av terminalemulatoren du bruker.

      Jeg håper det fungerer.

      Klem! Paul.

  10.   patrecas sa

    Bidraget blir satt pris på.

    10 poeng !!

    salu2!!

  11.   Rodolfo sa

    Tusen takk, det hjalp meg mye å avklare noen ting, total takk, for flere detaljer eller tvil om at jeg vil gå til MANSIDEN, gjentatte hilsener.

  12.   Jahir sa

    Onkel tusen takk, jeg har lest og testet eksemplene. tusen takk ... det er veldig forståelig. Jubel

  13.   geovanni sa

    Jeg brukte ubuntu Server 12.04.2 LTS, og den versjonen av crontab som jeg har, for å slette listen over brukerens jobber blir brukt, crontab -r (og -l, som denne håndboken sier). Visst er det spørsmål om versjoner.

    På den annen side kjørte jeg en gang bare crontab, og denne typen la meg lage min egen eksekveringsfil, men dette var ikke den som ble utført. Den som kjører er den i / etc / crontab. kanskje noen vil bruke kommentaren.

    PS (jeg søker med lokaliser og hvor er crontab, men den returnerte bare nevnte adresse og en annen fil som er kryptert, så hvis den som ble utført var den i / etc / crontab, men da jeg utførte crontab -e-kommandoen, så min ut med alle jobbene jeg hadde definert) hvor ble denne filen lagret '???? Hilsen. Jeg logger alltid på med root.

  14.   Sebastian sa

    Utmerket, veldig nyttig !!!

  15.   mmm sa

    Hei, jeg vil gjerne gjøre dette ………… «15 10 * * * root ifdown eth0»

    det vil si at nettverkskortet på et bestemt tidspunkt er slått av ………… vel, jeg la det i crontab og det fungerte ikke …… .. hva skjer?

    Saludos y gracias

  16.   Miguel sa

    Du savnet å definere "mon" etter tittelen "Legg til oppgaver i crontab"

    Artikkelen er fortsatt fin, cron er ekstremt nyttig.

  17.   Oscar sa

    Hvor kult var det gode innlegget, spør meg
    Hvis jeg vil holde oversikt over postene som er igjen etter utførelse av oppgaver, hvor kan jeg se det?

    er decdir Jeg vil se historikken til handlingene som ble gjort tidligere i denne filen, og jeg vil se hvem som har endret den og datoen

    takk

  18.   Oscar sa

    Jeg vil sjekke endringsloggen for dette

    hvordan kan jeg gjøre det

    takk

  19.   Andres Ledo sa

    God morgen,

    Jeg tror at i ubuntu-skriptet har du gjort en feil, du har satt ap-get -y oppgradering i stedet for apt-get -y oppgradering. (Du har lagt igjen en t).

    En hilsen.

    1.    la oss bruke linux sa

      Slik er det også. Takk skal du ha!
      Klem! Paul

  20.   Gabriel sa

    Jeg vil vite hvordan du lager en cron-fil for å kunne spesifisere tidspunktet hver gang den kjøres, katalogen etc.

  21.   Valentin sa

    Takk for at du avklarte operasjonen og de grunnleggende kommandoene for cron, for å underholde deg selv litt.

  22.   Sander sa

    Hver gang jeg leter etter informasjon om et hvilket som helst tema relatert til Gnu / Linux, går jeg rundt og rundt for alltid å finne i 90% av tilfellene den beste opplæringen i dette flotte samfunnet, jeg tror at fra nå av vil jeg begynne her og da andre steder.

    Hilsen

    1.    la oss bruke linux sa

      Takk Sander! En klem! Paul.

  23.   dario sa

    dom = dag i måneden
    dow = ukedag
    det er lettere hvis du forbinder

  24.   påske sa

    Tusen takk, dette er veldig komplett og godt forklart.

  25.   Maxilla sa

    Dette er det samme som OS-læreren min ga oss, jeg endrer ingenting, nå ser jeg hvorfor klassen er så dårlig .-. Vel, dette er det samme som lekser xD

  26.   Marcelo sa

    Estimert,

    Spørsmål, kan varigheten av en oppgave være begrenset?
    For eksempel har jeg en oppgave som gjentar seg hvert 5. minutt, ved repetisjon hvis den oppgaven fortsatt er aktiv, la den drepe den og kjøre den igjen.

    Takk,
    Marcelo. -

    1.    la oss bruke linux sa

      Hei, Marcelo!

      Jeg tror det ville være bedre om du reiser dette spørsmålet i vår spørsmålstjeneste Spørre DesdeLinux slik at hele samfunnet kan hjelpe deg med problemet ditt.

      En klem, Pablo.

  27.   aj sa

    bra innlegg.
    Hva er kommandoen per terminal for å legge til oppgaver i crontab (uten å gå inn i crontab og legge dem manuelt med 'crontab -e' eller erstatte crontab med en annen crontab med 'crontab-fil').
    Ideen er å lage et eksternt skript for å legge til oppgavene i crontab
    Takk

    1.    david sa

      det virker for meg at du kan bruke 'ekko' hva du vil legge til '| katt >> 'cronotab path (/ etc / cronotab)' «

  28.   Raphael Vera sa

    Hvordan ville et uttrykk løpe hver 3. dag nøyaktig

  29.   José Antonio sa

    Hei.

    Jeg har problemer med å utføre en cron-jobb.

    Jeg kjører følgende oppgave med cronta -e:

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

    men oppgaven er ikke gjort. Jeg har bekreftet at myfile.sh har kjøringstillatelse, og at brukeren som utfører den er root.

    Jeg kjører samme oppgave i / etc / crontab, og etter at jeg har startet tjenesten på nytt, fungerer den ikke for meg heller.
    Innholdet i myfile.sh er en kommando som oppdaterer en DB, og hvis jeg kjører den i konsollen, fungerer den.
    noen anelse om hva problemet kan være?

    1.    fredd sa

      Databasebrukeren har kanskje ikke alle tillatelsene, og du må først eksportere miljøvariablene fra databasemotoren.
      For eksempel i db2 vil denne linjen gå til begynnelsen av skriptet
      . / hjem / db2inst1 / sqllib / db2profile

      En annen årsak kan være at skriptet krever tilkobling til databasen, koble til databasen i skriptet

  30.   LA3 sa

    Jeg visste ikke at jeg måtte starte crond på nytt, jeg hadde kjempet med dette en stund

  31.   Kenya sa

    De vil vite hvordan de skal indikere at oppgaven kjøres hver eneste måned, til det angitte tidspunktet .. detaljene er at jeg ikke kan oppnå hvordan jeg vet at det tar den siste dagen i hver måned .. ??? Jeg måtte skrive dem ned en etter en, men når slutten av februar måned kommer at det er mest mulig, er det komplisert for meg ..

  32.   Jesus sa

    god dag!!

    Hvordan stopper jeg prosessen som utføres i crontab?

  33.   Jesus sa

    prosess * …………

  34.   Julianna sa

    Kan det være at du kan hjelpe meg? eu tenho um minha script forfattet som ikke fungerer no crontab! jб dei alle tillatelsene, ikke en spesifikk cron eller bruker som kan utføre det - det skjer ingenting! Jeg vil gjerne vite om du kan hjelpe meg, noen andre ting fungerer ikke cron! Vlws

  35.   Anthox sa

    Hvordan vil du sette en oppgave i gang hver siste dag i måneden (dager: 31-30-28)?

  36.   tfercho sa

    Som du vet brukes su-kommandoen til å endre bruker i en konsoll. Hvis jeg bruker kommandoen su således: "brukeren din" endrer bruker men uten de riktige innstillingene for "bruker", hvis jeg kjører su som: "su - bruker" endrer bruker ved å laste inn brukerinnstillingene. Med cron indikerer jeg brukeren, men hvordan laster jeg inn konfigurasjonen til denne brukeren?

  37.   Rane sa

    Og hvis jeg vil stoppe det?

  38.   regi sa

    Hei,
    Jeg vet ikke hva jeg gjør galt, men jeg følger trinnene og ingenting blir utført. Jeg har prøvd:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * rot usr / bin / test.sh

    og ingenting i det hele tatt. Det utfører ikke noe. Jeg har startet om og alt.

  39.   Ferqos sa

    tusen takk