Crontab i Linux – med realtidsexempel och verktyg

By rik

Innehållsförteckning

Låt oss utforska crontab, de kommandon som används och de olika operationer som hör samman med det.

Vi kommer att undersöka hur man schemalägger uppgifter med hjälp av cron-verktyget. Dessutom kommer vi även att kika på några onlineverktyg som underlättar formateringen och testningen av cron-kommandon.

Bakgrund

Crontab är en förkortning av ”cron table”. Ordet cron kommer från det grekiska ordet Chronos, som betyder tid. Crontab är en systemprocess som automatiskt utför specifika uppgifter och jobb enligt ett förutbestämt schema.

Användningsområden

Crontab är värdefullt för att utföra en rad olika åtgärder, som att hantera automatiserade säkerhetskopieringar, rotera loggfiler, synkronisera filer mellan olika servrar och rensa tillfälliga kataloger. Crontab kan användas för många typer av arbetsuppgifter, men det blir särskilt användbart när man arbetar med systemadministration.

Med cron kan en administratör schemalägga ett jobb så att det utförs vid en specifik tidpunkt och dag.

Låt oss nu undersöka hur man konfigurerar det här.

Crontab-syntax

Cron-verktyget läser konfigurationsfiler för att utföra kommandon. För att tolka raderna i crontab-konfigurationstabellerna används en specifik syntax. Crontab har sex fält. De första fem fälten (1-5) definierar datum och tid för körningen. Det sista fältet (det sjätte) kan innehålla ett användarnamn och/eller en uppgift/jobb/kommando/skript som ska köras.

* * * * * ANVÄNDARNAMN KOMMANDO/SKRIPT SOM SKA UTFÖRAS

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Veckodag (0 – 6) (0 är söndag, eller använd namn)
│ │ │ |____________ Månad (1 – 12),* betyder varje månad
│ │ |______________ Dag i månaden (1 – 31),* betyder varje dag
│ |________________ Timme (0 – 23),* betyder varje timme
|__________________ Minut (0 – 59), * betyder varje minut

Viktigt att notera:

  • Asterisk (*) används för att matcha alla möjliga värden för ett fält. En asterisk i timfältet skulle till exempel motsvara varje timme, och en asterisk i månadsfältet varje månad.

Användarnamn är valfritt (endast tillgängligt i systemets crontab-fil)

Exempel:

Låt oss utforska syntaxen med några exempel:

0 5 * * * /scripts/job.sh

1. Schemalägg en cron som körs dagligen kl 05:00.

0 6,18 * * * /scripts/job.sh

2. Schemalägg en cron som körs två gånger om dagen, kl 06:00 och 18:00.

* * * * * /scripts/job.sh

3. Schemalägg en cron som körs varje minut.

0 19 * * mon /scripts/job.sh

4. Schemalägg en cron som körs varje måndag kl 19:00.

*/10 * * * * /scripts/job.sh

5. Schemalägg en cron som körs var tionde minut.

* * * feb,jun,oct * /script/job.sh

6. Schemalägg en cron som körs under specifika månader.

25 7 4 3 * /home/script/backup.sh

7. Kör skriptet /home/script/backup.sh den 4 mars kl 07:25.

8. Schemalägg en cron som utförs var 30:e sekund.

  • Eftersom vi inte direkt kan styra sekunder i Crontab, kan vi göra det med hjälp av följande tvåstegsprocess.
* * * * * /home/scripts/script.sh
  • Låt oss börja med att schemalägga en uppgift som körs varje minut.
* * * * * sleep 30; /home/scripts/script.sh

Genom att använda kommandot sleep pausar vi körningen i 30 sekunder.

Ovanstående uppgift pausar körningen i 30 sekunder, varefter den återupptas.

Typer av Cron-konfigurationsfiler

Det finns två huvudtyper av Cron-konfigurationsfiler:

Crontab för UNIX/Linux-systemet

Denna typ kräver root-behörighet eftersom den oftast används för systemtjänster och viktiga jobb. Det sjätte fältet (i syntaxbeskrivningen ovan) innehåller namnet på den användare som kommandot ska köras som. Detta gör att systemets crontab kan köra kommandon som vilken användare som helst.

Användarens Crontab

En användare kan även ställa in egna cron-jobb med hjälp av crontab-kommandot. Även här är det sjätte fältet (i syntaxbeskrivningen ovan) det kommando som ska köras, och alla kommandon körs som användaren som skapade crontab. Varje användare kan ha sin egen crontab-fil, och även om dessa filer lagras i /var/spool/cron/crontabs, är de inte tänkta att redigeras direkt. Man måste använda crontab-kommandot för att redigera eller ställa in sina egna cron-jobb.

Hur fungerar det? Cron-tjänsten (demonen) körs i bakgrunden och kontrollerar regelbundet (varje minut) filen /etc/crontab och katalogerna /etc/cron.*/. Den kontrollerar även katalogen /var/spool/cron/. Kommandon körs av cron

när fälten för minut, timme och månad matchar aktuell tid, och minst ett av de två dagsfälten (dag i månaden eller veckodag) matchar aktuellt datum.

Grundläggande kommandon

Lista befintliga Cron-jobb

crontab -l

Vi kan lista alla Cron-jobb utan att öppna crontab-konfigurationsfilen med kommandot nedan:

[[email protected] ~]# crontab -l
no crontab for adminvista.com
[[email protected] ~]#

Om det inte finns några befintliga jobb, returneras följande:

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

Om användaren redan har lagt till några jobb visas de enligt ovan.

Cron-tabellen är användarspecifik, vilket innebär att du måste vara inloggad som en specifik användare för att kunna se cron-tabellistan.

Lista Cron för en viss användare

För att lista schemalagda jobb för en annan användare, använd -u (användare) och -l (lista) flaggor.

crontab -u annat_användarnamn -l

Exempel: crontab -u adminvista.com -l

Lägg till/ändra Crontab-poster

För att redigera crontab-posten kan man använda -e-flaggan, enligt nedan:

crontab -e

Kommandot ovan öppnar en vi-redigerare där man anger information om jobbet och sparar filen. När du sparat filen kan du bekräfta om cron är konfigurerat eller inte genom att använda kommandot crontab -l.

Lägg till/ändra Crontab-poster för en viss användare

crontab -u another_username -e

Vi kan redigera crontab för en annan användare med följande kommando:

Exempel: crontab -u adminvista.com -e

Ta bort Crontab-poster

Använd parametern -r med Crontab för att ta bort alla schemalagda jobb utan att crontab kräver bekräftelse.

crontab -r

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete adminvista.com's crontab?

Om du vill ha en bekräftelse innan schemalagda jobb tas bort kan du använda flaggan -i tillsammans med -r. Detta kommer att kräva en bekräftelse från användaren innan dennes crontab raderas.

Crontab Specialsträngar

Utöver den syntax som diskuterats ovan, kan vi också använda åtta speciella strängar i Crontab. Det kommer att spara tid och öka läsbarheten.
Specialsträng
Beskrivning
@reboot
Körs en gång efter omstart.
@yearly
Körs en gång per år, dvs 0 0 1 1 *
@annually
Samma som @yearly
@monthly
Körs en gång per månad, dvs 0 0 1 * *
@weekly
Körs en gång per vecka, dvs 0 0 * * 0
@daily
Körs en gång per dag, dvs 0 0 * * *
@midnight
Samma som @daily
@hourly

Körs en gång per timme, dvs 0 * * * *

Exempel på Crontab Specialsträngar

1. Crontab för att schemalägga uppgifter årligen:

@yearly /scripts/greeting.sh

Vi kan till exempel använda ovanstående för att skicka en nyårshälsning. Den kommer att köras vid den första minuten av varje år.

2. Crontab för att schemalägga uppgifter månadsvis:

@monthly /scripts/cleanup.sh

Vi kan använda ovanstående för att utföra vissa rensningsåtgärder i början av varje månad.

På liknande sätt kan vi använda andra Crontab specialsträngar för vecko-, dags- och timbaserade uppgifter.

Cron-kataloger

  • Systemadministratören kan använda ett systemomfattande cron-schema som finns i de fördefinierade cron-katalogerna nedan:
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly

/etc/cron.weekly

Crontab Exempel i Realtid

Låt oss diskutera några realtidsexempel som en systemadministratör eller IT-specialist ofta använder.

Ta bort tomma filer och kataloger

45 0 * * * adminvista.com hitta /tmp -typ f -empty -delete

Ovanstående cron-uttryck söker efter tomma filer och kataloger i /tmp-katalogen och raderar dem. Jobbet kommer att köras klockan 00:45 varje dag. Vi måste ange användarnamnet för att kunna utföra detta jobb. I exemplet ovan är det användaren adminvista.com som utför cron-jobbet.

Utför flera uppgifter med en enda cron

* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh

Flera uppgifter/jobb kan separeras med ett semikolon (;) och tilldelas ett enda cron-uttryck.

Cron-formaterings- och Testverktyg

Hittills har vi diskuterat kommandon och syntax för crontab för att schemalägga uppgifter. Men vad händer om du inte är systemadministratör och ditt jobb inte är att ställa in cron regelbundet? Då kan det vara svårt att komma ihåg syntaxen och det ökar risken för fel. Oroa dig inte, det finns en lösning på det här problemet.

Det finns flera onlineverktyg för att formatera crontab.

#1. Cron Job Generator Cron Job Generator

har ett mycket användarvänligt gränssnitt där du kan ange minut, dagar och sökväg till skriptet för att generera crontab.

Låt oss ta ett verkligt exempel där jag måste köra /home/processMonitor.sh var femte minut från måndag till fredag.

Då får jag följande Cron-syntax, som jag kan lägga till i min crontab genom att köra
crontab –e

0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

#2. Easycron Easycron

är ett användbart webbaserat verktyg för att schemalägga cron-jobb. Man kan skapa ett cron-jobb genom att ange en URL som ska anropas och ställa in tiden för när det ska köras. Man kan också specificera ett cron-uttryck, eller lägga till det manuellt. Viktigt är att det går att lägga till en grundläggande HTTP-autentisering för extra säkerhet.

Dessutom kan Easycron också användas för andra ändamål, som standard Cron-uttryck, loggar över cron-jobbskörningar, e-postmeddelanden, separata felloggar, etc.

#3. Crontab Generator Crontab Generator

är ett annat praktiskt verktyg för att generera crontab. Med det här verktyget kan man också lägga till om man vill spara cron-utdata i en fil eller skicka dem till en e-postadress.

#4. Crontab Guru Crontab Guru

är en enkel redigerare för cron-uttryck online. Dessutom är det ett bra sätt att övervaka ditt cronjob. Allt som behövs är att kopiera ett tillhandahållet kommando och lägga till i slutet av crontab-definitionen. Om cron-jobbet misslyckas eller inte ens startar får du ett varningsmeddelande.

I exemplet nedan kommer jobbet att köras klockan 04:05 varje dag, varje månad och varje vecka.

#5. CRON Tester CRON Tester

låter oss testa tids/datumbestämningar för cron. Ibland kan det vara nödvändigt att avkoda en befintlig cron-syntax för felsökning eller bara för att utföra ett test.

Då kan man använda det här verktyget. Allt som behövs är att kopiera in cron-uttrycket i cron-definitionsfältet. Därefter väljer man antalet iterationer och klickar på Testa för att se vilka datum det kommer att köras.

Låt oss undersöka cron-uttrycket 4 3 */2 * * som är tänkt att köras 03:04 (AM) varannan dag. Låt oss bekräfta detta med cron tester.

Slutsats Jag hoppas att informationen ovan hjälper dig att få en bättre förståelse för Crontab och att konfigurera cron-jobb. Att schemalägga jobb med hjälp av Cron är en av många uppgifter som Linux-administratörer utför. Om du är intresserad av att lära dig mer omancerade färdigheter, ta en titt på den härkursen.

.