Crontab i Linux – med realtidsexempel och verktyg

Låt oss utforska crontab, dess kommandon och olika operationer associerade med Crontab.

Vi kommer att lära oss hur man schemalägger uppgifter med hjälp av cron-verktyget, och till sist kommer vi också att diskutera några av onlineverktygen som hjälper oss att formatera och testa cron-kommandona.

Innehållsförteckning

Ursprung

Crontab står för ”cron table”. Ordet cron har tagits från det grekiska ordet Chronos som betyder tid. Crontab är en systemdemonprocess som automatiskt utför vissa uppgifter och jobb enligt den schemalagda tiden.

Användningsfall

Crontab är användbar för att utföra olika operationer som att hantera automatiserad säkerhetskopiering, rotera loggfiler, synkronisera filer mellan fjärrmaskiner och rensa ut tillfälliga mappar etc. Crontab kan användas för alla typer av arbete, men det blir extra användbart när vi börjar ta itu med systemadministrativ typ av arbete.

Med hjälp av cron kan en administratör schemalägga ett jobb som ska köras på en viss tid och dag.

Så låt oss se hur vi kan ställa in det här.

Crontab-syntax

För att köra en lista med kommandon läser verktyget cron konfigurationsfilerna. För att tolka raderna i crontab-konfigurationstabellerna följer den en Crontab-syntax. Crontab har sex fält, och de första fem (1-5) fälten definierar datum och tid för körning. Det sista fältet, dvs. 6:e fältet, kan vara ett användarnamn och/eller uppgift /jobb/kommando/skript som ska köras.

* * * * * USER_NAME KOMMANDO/SCRIPT-ATT UTFÖRA

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ 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

Anmärkningar:

  • Asterisk
  • används för att matcha alla möjliga värden för ett fält. Till exempel skulle en asterisk som används i timmefältet motsvara varje timme eller en asterisk i månadsfältet skulle motsvara varje månad.

användarnamn är valfritt (endast tillgängligt om det är systemets crontab-fil)

Exempel:

Låt oss förstå syntaxen ovan med några exempel

0 5 * * * /scripts/job.sh

1. Schemalägg en cron som ska köras kl. 05.00 dagligen

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

2. Schemalägg en cron som ska köras två gånger om dagen kl. 06.00 och 18.00

* * * * * /scripts/job.sh

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

0 19 * * mon /scripts/job.sh

4. Schemalägg en cron som ska köras varje måndag kl. 19.00.

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

5. Schemalägg en cron som ska utföras var 15:e minut.

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

6. Schemalägg en cron att köra på utvalda månader

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

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

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

  • Eftersom vi inte har kontroll över sekunder i Crontab, men vi kan uppnå det genom nedanstående tvåstegsprocess.
* * * * * /home/scripts/script.sh
  • Låt oss först schemalägga en uppgift som körs varje minut.
* * * * * sleep 30; /home/scripts/script.sh

Låt oss nu använda sleep-kommandot för att pausa exekveringen i 30 sekunder.

Ovanstående uppgift kommer att stoppa exekveringen i 30 sekunder och den kommer att återupptas igen.

Typ av Cron-konfigurationsfiler

Det finns två typer av Cron-konfigurationsfiler:

UNIX/Linux-systemet Crontab

Detta kräver root-behörighet eftersom det vanligtvis används för systemtjänster och kritiska jobb. Det sjätte fältet (i ovanstående syntaxbeskrivning) är namnet på en användare som kommandot ska köras som. Det ger systemets crontab möjlighet att köra kommandon som vilken användare som helst.

Användaren Crontab

En användare kan också installera sina egna cron-jobb med hjälp av crontab-kommandot. Även här är det sjätte fältet (i ovanstående syntaxbeskrivning) kommandot 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 är filer i /var/spool/cron/crontabs, är de inte avsedda att redigeras direkt. Vi måste använda crontab-kommandot för att redigera eller ställa in våra egna cron-jobb.

Hur fungerar det? Cron-tjänsten (demon) körs i bakgrunden och kontrollerar ständigt (varje minut) /etc/crontab-filen och /etc/cron.*/-katalogerna. Den kontrollerar också katalogen /var/spool/cron/. Kommandon exekveras av cron

när fälten för minut, timme och månad matchar den aktuella tiden, och minst ett av tvådagarsfälten (dag i månaden eller veckodag) matchar den aktuella dagen.

Grundläggande kommandon

Lista ut befintliga Cron-jobb

crontab -l

Vi kan lista ut 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ågot befintligt jobb kommer det att returnera utdata som

[[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 av jobben kommer det att visas enligt följande.

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

Lista Cron för en viss användare

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

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 vi använda -e-alternativet som visas nedan.

crontab -e

Kommandot ovan öppnar vi-redigerare där du anger detaljerna för jobbet och sparar filen. När du har sparat kan du verifiera om cron är konfigurerat eller inte med 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 kommandot nedan

Exempel: crontab -u adminvista.com -e

Ta bort Crontab Entry

Använd parametern -r med Crontab för att ta bort kompletta schemalagda jobb utan bekräftelse från crontab

crontab -r

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

Om du vill ha bekräftelse innan du tar bort schemalagda jobb, använd -i-alternativet med -r, vilket kommer att begära bekräftelse från användaren innan du tar bort användarens crontab.

Crontab specialsträng

Förutom ovanstående syntax som vi diskuterade, kan vi också använda åtta specialsträngar från Crontab. Det kommer inte bara att spara vår tid utan det kommer också att förbättra läsbarheten.
Specialsträng
Beskrivning
@starta om
Kör en gång, efter uppstart.
@årlig
Kör en gång om året, dvs 0 0 1 1 *
@årligen
Samma som @yearly
@en gång i månaden
Kör en gång i månaden, dvs 0 0 1 * *
@varje vecka
Kör en gång i veckan, dvs 0 0 * * 0
@dagligen
Kör en gång om dagen, dvs 0 0 * * *
@midnatt
Samma som @dagligen
@varje timme

Kör en gång i timmen, dvs 0 * * * *

Exempel på specialsträngar för Crontab

1. Crontab för att schemalägga uppgifter på årsbasis

@yearly /scripts/greeting.sh

Vi kan köra över en 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 som ska utföras på månadsbasis.

@monthly /scripts/cleanup.sh

Vi kan utföra ovanstående för att utföra vissa saneringsaktiviteter i början av varje månad.

På samma sätt kan vi använda andra Crontab specialsträngar för vecko-, dagliga- och timändamål.

Cron Directory

  • Systemadministratören kan använda ett systemomfattande cron-schema som kommer under den fördefinierade cron-katalogen som visas nedan
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly

/etc/cron.weekly

Crontab Realtidsexempel

Låt oss diskutera några av de realtidsexempel som en systemadministratör eller IT-proffs brukar använda.

Ta bort tomma filer och katalog

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

Ovanför cron expression hittar de tomma filerna och katalogen från /tmp-katalogen och det kommer att radera dem. Det här jobbet kommer att pågå 12.45 på en daglig basis. Vi måste nämna användarnamnet för att utföra detta jobb. I exemplet ovan utför adminvista.com-användaren cron-jobboperation.

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 kan tilldelas ett enda cron-uttryck.

Cron formaterings- och testverktyg

Hittills har vi diskuterat kommandon och syntax för crontab för att schemalägga en uppgift. Men vad händer om du inte är en systemadministratör och ditt jobb inte är att ställa in Cron regelbundet, det kanske inte går att komma ihåg syntaxen och det öppnar utrymme för fel. Oroa dig inte, vi har en lösning på detta problem.

Det finns flera Cron-formateringsverktyg tillgängliga online.

# 1. Cron Job Generator Cron Job Generator

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

Låt oss ta ett realtidsexempel där jag måste köra /home/processMonitor.sh var 5:e minut mellan måndag till fredag.

Så jag fick Cron-syntaxen nedan som jag kan lägga 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 en användbar webbaserad cron jobbschemaläggare. Vi kan skapa ett cron-jobb genom att ange en URL att anropa, vi kan ställa in tiden när det ska köras. Vi kan också specificera ett cron-uttryck eller lägga till det manuellt från en beskrivande form. Viktigt är att vi valfritt kan använda grundläggande HTTP-autentisering för ett litet lager av säkerhet.

Inte bara detta, utan Easycron kan också användas för att uppnå andra syften som standard Cron-uttryck, Cron-jobbexekveringsloggar, e-postmeddelanden, separata felloggar, etc.

# 3. Crontab Generator Crontab Generator

är ett annat praktiskt verktyg för att generera crontab och med det här verktyget kan du också lägga till om du vill spara cron-utdata till filen eller skicka den till e-post.

# 4. Crontab Guru Crontab Guru

är en enkel online cron-schemauttrycksredigerare. Dessutom ger det ett användbart sätt att övervaka ditt cronjob. Allt vi behöver göra är att kopiera ett tillhandahållet kommando och lägga till i slutet av crontab-definitionen. Om cron-jobbet misslyckas eller inte ens startar kommer du att få ett varningsmail.

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

# 5. CRON Tester CRON-testare

tillåter oss att testa cron tid/datum definitioner. Det kan finnas en situation där vi måste avkoda den befintliga cron-syntaxen för felsökning eller bara vill göra ett test.

För att göra det kan vi använda det här verktyget. Allt vi behöver göra är att kopiera och klistra in vårt cron-uttryck i cron-definitionsfältet, välj sedan antalet iterationer och klicka på Testa för att se de olika datumen då det kommer att köras.

Låt oss kolla ett av våra cron-uttryck 4 3 */2 * *som ska köras 03:04(AM) varannan dag. Låt oss verifiera det med cron tester.

Slutsats Jag hoppas att ovanstående hjälper dig att få en bättre förståelse för Crontab och att ställa in cron-jobb. Att schemalägga jobb genom Cron är en av de många uppgifter som utförs av Linux Admin. Om du är intresserad av att lära dig de avancerade färdigheterna, kolla in det härkurs

.