Cron & crontab, forklaret

Lucaine han offentliggjorde et stykke tid siden fremragende tutorial om cron og crontab som jeg synes er værd at dele. Cron svarer til en plan svarende til planlagte opgaver i Windows, kun at det håndteres fra terminalen. De, der foretrækker en visuel grænseflade for at nå det samme mål, kan se dette en anden artikel.

Hvad er Cron?

Navnet cron kommer fra den græske chronos, hvilket betyder "tid". I Unix-operativsystemet er cron en regelmæssig baggrundsprocessmanager (dæmon), der kører processer eller scripts med jævne mellemrum (for eksempel hvert minut, dag, uge ​​eller måned). De processer, der skal udføres, og det tidspunkt, hvor de skal udføres, er specificeret i crontab-filen.

Como værker

Cron-dæmonen starter fra /etc/rc.d/ o /etc/init.d afhængigt af fordelingen. Cron løber i baggrunden, kontrollerer crontab-opgavetabellen hvert minut / Etc / crontab eller / var / spole / cron på jagt efter opgaver, der skal udføres. Som bruger kan vi tilføje kommandoer eller scripts med opgaver til cron for at automatisere nogle processer. Dette er f.eks. Nyttigt at automatisere opdateringen af ​​et system eller et godt backupsystem.

relateret artikel:
Selvstudie: Installer pakkerne .tar.gz og .tar.bz2

Hvad er Crontab?

Crontab er en simpel tekstfil, der gemmer en liste over kommandoer, der skal udføres på et tidspunkt, der er angivet af brugeren. Crontab vil kontrollere datoen og klokkeslættet, som scriptet eller kommandoen skal udføres, udførelsestilladelserne, og det gør det i baggrunden. Hver bruger kan have deres egen crontab-fil, faktisk / Etc / crontab det antages at være rodbrugerens crontab-fil, når normale brugere (og endda root) vil generere deres egen crontab-fil, så bruger vi kommandoen crontab.

Crontab er den nemmeste måde at styre cron-opgaver på multi-user-systemer på, enten som en simpel systembruger eller root-bruger.

Brug af crontab

Vi starter med et simpelt eksempel.

Vi vil automatisere opdateringen af ​​et system for at fjerne det irriterende ved "Jeg skal altid opdatere, og det kan jeg ikke lide!"

hvordan
relateret artikel:
Kommandoer til at kende systemet (identificer hardware og nogle softwarekonfigurationer)

Først og fremmest laver vi et script. Dette script kaldes af cron og indeholder alle de instruktioner, vi vil have det til at gøre, derfor er det nødvendigt at teste det i flere tilfælde og på flere måder, før det inkluderes i cron, et simpelt opdateringsscript som dette:

#! / bin / bash #script-opdateringseksempel #Vælg din distribution # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Fjern # fra din distrolinje. Hvis det er Ubuntu / Debian, starter det med apt-get.

Vi gemmer scriptet som update.sh (f.eks. Scriptsmappe dit hjem). Vi ændrer udførelsestilladelserne for det nævnte script med:

chmod a + x ~ / scripts / update.sh

Vi kører scriptet et par gange for at kontrollere, at alt kører problemfrit, vi ændrer det, der er nødvendigt (det må ikke indeholde fejl, hvis ikke cron kun gentager en fejl igen og igen). Nu for at tilføje opgaven til vores crontab.

Føj opgaver til crontab

Vi udfører udgaven af ​​crontab med crontab -e, i nogle distroer (som f.eks. Ubuntu) giver det os mulighed for at vælge den teksteditor, vi ønsker, resten har vi tilbage med vi. Crontab-filen vil se sådan ud.

# mh dom mon dow brugerkommando

hvor:

  • m svarer til det øjeblik scriptet udføres, værdien varierer fra 0 til 59
  • h det nøjagtige tidspunkt, 24-timers format håndteres, værdierne varierer fra 0 til 23, hvor 0 er 12:00 midnat.
  • gave refererer til månedsdagen, for eksempel kan du angive 15, hvis du vil køre hver 15. dag
  • dow betyder ugedagen, det kan være numerisk (0 til 7, hvor 0 og 7 er søndag) eller de første 3 bogstaver på dagen på engelsk: man, ti, ons, tors, fre, lør, sol.
  • bruger definerer den bruger, der udfører kommandoen, den kan være root eller en anden bruger, så længe de har tilladelse til at udføre scriptet.
  • kommando henviser til kommandoen eller den absolutte sti til det script, der skal udføres, eksempel: /home/usuario/scripts/update.sh, hvis det kalder et script, skal det være eksekverbart

For at være klar et par eksempler på cron-opgaver forklaret:

15 10 * * * bruger /home/bruger/scripts/update.sh

Det kører scriptet update.sh kl. 10:15 hver dag

15 22 * * * bruger /home/bruger/scripts/update.sh

Det kører scriptet update.sh kl. 10:15 hver dag

00 10 * * 0 root apt-get -y opdatering Root user

Den kører en opdatering hver søndag kl. 10

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

Rodbrugeren kører en opdatering hver søndag (søn) kl. 10:45

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

Den 20. november kl. 7:30 kører brugeren scriptet

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

Den 11. november kl. 7:30, og det er søndag, fejrer brugeren sin sysadmin (det vil sige mig)

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

En irriterende påmindelse hvert minut hver time hver dag (IKKE anbefales).

De kan stadig håndteres specielle intervaller:

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

5:30 om eftermiddagen hver dag fra mandag til fredag.

00 12 1,15,28 * *

Kl. 12 hver første, femtende og 28. i hver måned (ideel til lønningsliste)

Hvis dette er forvirrende, skal du håndtere crontab specielle strenge til at definere disse intervaller.

@reboot Kør én gang ved opstart
@yearly kører kun en gang om året: 0 0 1 1 *
@ hvert år det samme som @ årligt
@monthly kører en gang om måneden, den første dag: 0 0 1 * *
@ ugentlig ugentlig det første minut i den første times uge. 0 0 * * 0 ″.
@ dagligt dagligt kl. 12:00 0 0 * * *
@ midnat samme som @daily
@hourly i det første minut i hver time: 0 * * * *

Dens anvendelse er meget enkel.

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

Sidst men ikke mindst:

Cron jobledelse

crontab-fil

Udskift den eksisterende crontab-fil med en brugerdefineret fil

crontab -e

Rediger brugerens crontab-fil, hver nye linje bliver en ny crontab-opgave.

crontab-l

Liste over alle brugerens crontab-opgaver

crontab -d

Slet brugerens crontab

crontab -c dir

Definerer brugerens crontab-bibliotek (dette skal have brugerens skrive- og eksekveringstilladelser)

crontab -u bruger

præfiks til at håndtere en anden brugers crontab, eksempler:

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

Dette værktøj kan, som mange andre, ses mere detaljeret og mere detaljeret i:

Tak Lucain!