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.
.