Cron & crontab, förklarade

Lucaine publicerade för ett tag sedan utmärkt handledning om cron och crontab som jag tycker är värt att dela. Cron är ett slags motsvarighet till schemalagda uppgifter i Windows, bara att den hanteras från terminalen. De som föredrar ett visuellt gränssnitt för att uppnå samma mål kan se detta en annan artikel.

Vad är Cron?

Namnet cron kommer från den grekiska chronos som betyder "tid". I Unix-operativsystemet är cron en vanlig bakgrundsprocesshanterare (daemon) som kör processer eller skript med jämna mellanrum (till exempel varje minut, dag, vecka eller månad). Processerna som måste köras och när de måste köras anges i crontab-filen.

Como verk

Cron-demonen börjar från /etc/rc.d/ o /etc/init.d beroende på fördelningen. Cron springer i bakgrunden, kontrollerar crontab-uppgiftstabellen varje minut / Etc / crontab in / var / spole / cron på jakt efter uppgifter som ska utföras. Som användare kan vi lägga till kommandon eller skript med uppgifter för att cron för att automatisera vissa processer. Detta är till exempel användbart för att automatisera uppdateringen av ett system eller ett bra reservsystem.

Relaterad artikel:
Självstudier: Installera paketen .tar.gz och .tar.bz2

Vad är Crontab?

Crontab är en enkel textfil som lagrar en lista med kommandon som ska köras vid en tid som anges av användaren. Crontab kontrollerar datum och tid när skriptet eller kommandot ska köras, körningstillstånd och det gör det i bakgrunden. Varje användare kan ha sin egen crontab-fil, i själva verket / Etc / crontab det antas vara rotanvändarens crontab-fil, när normala användare (och till och med root) vill skapa sin egen crontab-fil kommer vi att använda kommandot crontab.

Crontab är det enklaste sättet att hantera cron-uppgifter på fleranvändarsystem, antingen som en enkel systemanvändare eller root-användare.

Använda crontab

Vi börjar med ett enkelt exempel.

Vi kommer att automatisera uppdateringen av ett system, för att eliminera det irriterande med "Jag måste alltid uppdatera och det gillar jag inte!"

hur man
Relaterad artikel:
Kommandon för att känna till systemet (identifiera hårdvara och vissa programkonfigurationer)

Först och främst kommer vi att skapa ett manus. Det här skriptet kommer att anropas av cron och innehåller alla instruktioner vi vill att det ska göra, därför är det nödvändigt att testa det i flera fall och på flera sätt innan det inkluderas i cron, ett enkelt uppdateringsskript som detta:

#! / bin / bash #exempel på skriptuppdatering #Välj din distribution # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Ta bort # från distrolinjen. Om det är Ubuntu / Debian börjar det med apt-get.

Vi sparar skriptet som update.sh (t.ex. skriptkatalog ditt hem). Vi ändrar exekveringsbehörigheterna för nämnda skript med:

chmod a + x ~ / scripts / update.sh

Vi kör skriptet ett par gånger för att verifiera att allt går smidigt, vi ändrar vad som är nödvändigt (det får inte innehålla fel, om inte cron bara upprepar ett fel om och om igen). Nu för att lägga till uppgiften till vår crontab.

Lägg till uppgifter i crontab

Vi kör utgåvan av crontab med crontab -e, i vissa distros (som Ubuntu) ger det oss möjlighet att välja den textredigerare vi vill ha, resten har vi kvar med vi. Crontab-filen ser ut så här.

# mh dom mon dow användarkommando

var:

  • m motsvarar den minut skriptet körs, värdet varierar från 0 till 59
  • h den exakta tiden, 24-timmarsformatet hanteras, värdena varierar från 0 till 23, med 0 är 12:00 midnatt.
  • present refererar till dagen i månaden, till exempel kan du ange 15 om du vill köra var 15: e dag
  • dow betyder veckodag, det kan vara numeriskt (0 till 7, där 0 och 7 är söndag) eller de tre första bokstäverna på engelska: man, tis, ons, tors, fre, lör, sol.
  • användare definierar användaren som kommer att utföra kommandot, det kan vara root eller en annan användare så länge de har behörighet att utföra skriptet.
  • kommando refererar till kommandot eller den absoluta sökvägen för skriptet som ska köras, exempel: /home/usuario/scripts/update.sh, om det kallar ett skript måste det vara körbart

För att vara tydlig förklaras några exempel på cron-uppgifter:

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

Det körs update.sh-skriptet klockan 10:15 varje dag

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

Update.sh-skriptet körs klockan 10 varje dag

00 10 * * 0 root apt-get -y uppdatering Rotanvändare

Det körs en uppdatering varje söndag klockan 10:00

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

Rotanvändaren kör en uppdatering varje söndag (sön) kl 10:45

30 7 20 11 * användare /home/usuario/scripts/update.sh

Den 20 november kl 7:30 kommer användaren att köra skriptet

30 7 11 11 solanvändare /home/usuario/scripts/pastel_con_velitas.sh

Den 11 november kl 7:30 och det är söndag firar användaren sin sysadmin (det vill säga jag)

01 * * * * user /home/user/scripts/molestorecordatorio.sh

En irriterande påminnelse varje minut varje timme varje dag (rekommenderas INTE).

De kan fortfarande hanteras specialområden:

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

5:30 på eftermiddagen varje dag från måndag till fredag.

00 12 1,15,28 * *

Klockan 12 den första, femtonde och 28: e varje månad (perfekt för löner)

Om detta är förvirrande, hantera crontab speciella strängar för att definiera dessa intervall.

@reboot Kör en gång vid start
@yearly körs bara en gång om året: 0 0 1 1 *
@ årligen samma som @ årligen
@monthly körs en gång i månaden, den första dagen: 0 0 1 * *
@ Weekly Weekly den första minuten av den första timmen i veckan. 0 0 * * 0 ″.
@ dagligen dagligen, klockan 12:00. 0 0 * * *
@midnight samma som @daily
@hourly vid första minuten i varje timme: 0 * * * *

Dess användning är mycket 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 inte minst:

Cron jobbhantering

crontab-fil

Ersätt den befintliga crontab-filen med en användardefinierad fil

crontab -e

Redigera användarens crontab-fil, varje ny rad blir en ny crontab-uppgift.

crontab-l

Lista alla användarens crontab-uppgifter

crontab -d

Ta bort användarens crontab

crontab -c dir

Definierar användarens crontab-katalog (detta måste ha användarens skriv- och exekveringsbehörigheter)

crontab -u-användare

prefix för att hantera en annan användares crontab, exempel:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u användare

Detta verktyg, som många andra, kan ses mer ingående och mer detaljerat i:

Tack Lucain!