Crontab i Linux: Job Scheduling EXEMPEL

⚡ Smart sammanfattning

Crontab i Linux schemalägger kommandon att köras automatiskt vid fasta tider, datum eller intervall med hjälp av cron-daemonen, vilket låter administratörer automatisera säkerhetskopior, loggrensning, aviseringar och rutinmässigt systemunderhåll utan manuell åtgärd.

  • Cron-daemonen: Cron-bakgrundsprocessen läser crontab-filer och kör varje schemalagt jobb exakt vid den minut du anger.
  • 🗂️ Crontab-format: Fem tidsfält – minut, timme, månadsdatum, månad och veckodag – föregår kommandot som ska köras.
  • ✍️ Redigeringsjobb: Använd crontab -e för att lägga till eller ändra jobb, crontab -l för att lista dem och crontab -r för att ta bort dem.
  • 🔁 Speciella strängar: Genvägar som @reboot, @daily, @weekly och @hourly ersätter de fem tidsfälten för vanliga scheman.
  • 📅 Praktiska exempel: Färdiga poster täcker var femte minut, specifika veckodagar, månatliga körningar och startuppgifter.
  • 🤖 AI-hjälp: AI-assistenter och GitHub Copilot kan generera och förklara cron-uttryck på några sekunder.

Crontab i Linux jobbschemaläggning med exempel

Crontab, förkortning för cron-tabell, är konfigurationsfilen och kommandot som driver Linux jobbschemaläggning. Avsnitten nedan förklarar crontab-formatet, kommandona för att lägga till, lista och ta bort jobb, de speciella @-strängarna och exempel på schemaläggning som är färdiga att använda.

Vad är crontab?

Cron är uppkallat efter det grekiska ordet "Chronos", som betyder tid. Det är en systemprocess (en daemon) som automatiskt utför uppgifter enligt ett fast schema. Cron är en uppsättning kommandon som används för att köra regelbundna schemalagda uppgifter. Crontab står för "cron-tabell", och det låter dig använda cron-jobbschemaläggaren för att utföra dessa uppgifter.

Crontab är också namnet på programmet som används för att redigera det schemat. Det drivs av en crontab-fil – en konfigurationsfil som listar de shell-kommandon som ska köras regelbundet enligt det angivna schemat.

Varför använda Cron-jobb?

Här är de främsta anledningarna till att använda cron-jobb i Linux:

  • Tar schemalagda säkerhetskopior av loggfiler eller databaser.
  • Tar bort gamla loggfiler automatiskt.
  • Archiraderar och rensar databastabeller.
  • Skickar e-postmeddelanden med aviseringar, till exempel nyhetsbrev eller påminnelser om lösenordsutgång.
  • Utför regelbunden rensning av cachade data.
  • Automatiserar repetitiva Unix- och Linux-jobb.
  • Automatiserar rutinmässigt systemunderhåll.

Hur använder man cron i Linux?

Linux-systempaketet innehåller en användbar uppgiftsschemaläggare som heter crontab. Crontab är populärt eftersom ett jobb kan schemaläggas att köras som root-användare, vilket gör automatiserade systemändringar enklare. Du ändrar helt enkelt uppgiften en gång och väntar sedan tills den utlöses igen enligt schemat.

Linux Crontab-format

En Linux crontab-post har sex fält. De första fem fälten anger tid och datum för körningen, och det sjätte fältet innehåller kommandot att köra.

Crontab-syntax:

[Minute] [hour] 
[Day_of_the_Month] 
[Month_of_the_Year] 
[Day_of_the_Week] 
[command]

Diagrammet nedan mappar varje asterisk i en crontab-post till det fält den kontrollerar, från minut till veckodag, följt av kommandot som ska köras.

Linux crontab-formatdiagram som visar de fem tidsfälten och kommandot

De fem tidsfälten accepterar dessa värden: minut (0–59), timme (0–23), veckodag (1–31), månad (1–12 eller jan–dec) och veckodag (0–7, där 0 och 7 båda betyder söndag). Du styr varje fält med dessa specialtecken:

  • Asterisk (*): Matchar alla möjliga värden för det fältet.
  • Definiera ett intervall: Använd ett bindestreck för att ange ett intervall, till exempel 1–10, 30–40, jan–mar eller mån–ons.
  • Definiera flera intervall: Använd kommatecken för att kombinera intervall, till exempel apr-juni, okt-dec.

Hur man lägger till/ändrar Crontab

Användare kan redigera sina egna crontab-jobb med följande crontab-kommando. Alternativet -u riktar sig till en specifik användares crontab, så ange användarnamnet som visas i de senare exemplen:

$ crontab -u -e 

Kommandot ovan öppnar den personliga crontab-konfigurationen för ditt system, som du kan redigera i din standardtextredigerare.

Du behöver inte starta om cron; den hämtar dina ändringar automatiskt. För att se dina aktuella jobb, använd:

$ crontab -l

För att ta bort dina crontab-uppgifter, använd följande kommando:

$ crontab -r

För att lägga till eller uppdatera ett jobb i crontab, använd kommandot nedan:

crontab -e

För att redigera en annan användares crontab, namnge användaren med alternativet -u:

crontab -u username -e

Hur man listar Crontab

För att visa crontab-posterna för den aktuella användaren:

crontab -l

För att visa crontab-posterna för en specifik användare:

crontab -u username -l

Viktiga Crontab-exempel

Här är några viktiga, färdiga exempel på crontab-scheman:

BESKRIVNING Kommando
Kör de olika schemaläggningsjobben. Kommandot nedan körs dagligen klockan 07:00 och 17:00.
0 7,17 * * * /scripts/script.sh
Kör ett cron-jobb var 5:e minut.
*/5* * * * *  /scripts/script.sh
Utför uppgiften varje Monday klockan 5 på morgonen. Detta är praktiskt för veckovisa uppgifter som systemrensning.
0 5 * * mon  /scripts/script.sh
Kör ditt skript med 3 minuters intervall.
*/3 * * * * /scripts/monitor.sh
Schemalägger ett cron-jobb som körs under specifika månader — här, februari, juni och september.
* * * feb,jun,sep *  /script/script.sh
Körs på valda dagar. Detta exempel körs varje Monday och onsdag klockan 5.
0 17 * * mon,wed  /script/script.sh
Tillåter att cron körs den första lördagen i varje månad.
0 2 * * sat  [ $(date +%d) -le 06 ] && /script/script.sh
Kör ett skript med 6 timmars mellanrum, konfigurerat enligt nedan.
0 */6 * * * /scripts/script.sh
Schemalägger en uppgift att köras två gånger Monday och tisdag. Använd följande inställningar för att göra det.
0 4,17 * * mon,tue /scripts/script.sh
Schemalägger ett cron-jobb att köras var 15:e sekund.
* * * * * /scripts/script.sh
* * * * *  sleep 15; /scripts/script.sh
Schemalägger uppgifter årligen. @yearly liknar "0 0 1 1 *". Den kör uppgiften en gång om året vid midnatt den 1 januari – praktiskt för nyårshälsningar.
@yearly /scripts/script.sh 
Kör uppgifter månadsvis. @monthly liknar "0 0 1 * *". Den kör uppgiften vid midnatt den första dagen i varje månad.
@monthly /scripts/script.sh
Utför flera uppgifter med en enda cron-post.
* * * * * /scripts/script.sh; /scripts/scrit2.sh
Schemalägger uppgifter veckovis. @weekly liknar "0 0 * * 0". Den kör veckovisa uppgifter som systemrensning vid midnatt varje söndag.
@weekly /bin/script.sh
Schemalägger uppgifter dagligen. @daily liknar "0 0 * * *". Den kör uppgiften en gång om dagen vid midnatt.
@daily /scripts/script.sh
Kör uppgifter varje timme. @hourly liknar "0 * * * *". Den kör uppgiften i början av varje timme.
@hourly /scripts/script.sh
Kör uppgifter vid omstart av systemet. @reboot är användbart för uppgifter som systemet ska köra vid start, vilket gör att bakgrundsjobb startas automatiskt.
@reboot /scripts/script.sh

Vanliga frågor

Användarens crontabbar lagras i /var/spool/cron/ (eller /var/spool/cron/crontabs/ på Debian och Ubuntu), medan det systemomfattande schemat finns i /etc/crontab och katalogen /etc/cron.d. Redigera alltid användar-crontabbfiler med crontab -e istället för att öppna dessa filer direkt.

Cron kör bara jobb vid exakt deras schemalagda tid och hoppar över dem om maskinen är avstängd. tractar bort missade jobb och kör dem när systemet är påslaget igen, så det passar bärbara och stationära datorer som inte alltid är igång.

Cron använder en minimal miljö, så en begränsad PATH är den vanliga orsaken. Använd absoluta sökvägar för kommandon och skript, gör skriptet körbart och omdirigera utdata till en loggfil så att du kan fånga upp eventuella fel för felsökning.

Lägg till >> /path/to/logfile 2>&1 till kommandot för att fånga standardutdata och fel i en fil. Alternativt kan du ställa in variabeln MAILTO högst upp i crontabben så att cron skickar utdata för varje jobb till den adressen via e-post.

Filerna /etc/cron.allow och /etc/cron.deny styr åtkomsten. Om cron.allow finns får endast de användare som listas i den använda crontab. Om endast cron.deny finns får alla användare utom de som listas schemalägga jobb.

En användar-crontab skapad med crontab -e har fem tidsfält följt av kommandot. Systemfilen /etc/crontab lägger till ett fält som namnger användaren som kör jobbet, läser minut, timme, dag, månad, veckodag, användare och sedan kommandot.

Ja. Maskininlärningsverktyg kan baslinjeberäkna normala jobbkörningstider och slutförandetider, och sedan flagga avvikelser som ett jobb som körs för länge, misslyckas tyst eller missar sitt schema. AI-logganalys grupperar också relaterade fel för att påskynda arbetet med grundorsaker.

Ja. GitHub Copilot kan generera cron-uttryck från en kommentar på vanligt språk, förklara vad ett schema som */5 * * * * gör och utarbeta ett shell-skript som ett jobb kör. Testa alltid uttrycket innan du lägger till det i en produktions-crontab.

Sammanfatta detta inlägg med: