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!