Hur man använder Cron på Linux Unix

Vad är cron?


Cron är namnet på programmet som gör att Linux / Unix -användare automatiskt kan utföra kommandon eller skript (grupper av kommandon) vid en viss tid eller datum. Det används normalt för administrativa uppgif.webptskommandon, till exempel säkerhetskopior, men det kan användas för att köra vad som helst. Som definierat på cron man -sidorna; det är en demon som kör schemalagda program.
I praktiskt taget alla Linux -distributioner används Vixie Cron -versionen, av personen som utvecklade den, som är Paul Vixie, en av Unix stora guruer, även skapare, bland andra system, av BIND som är en av DNS -servrarna som är mest populära i världen.

Starta cron


Cron är en daemon (tjänst), vilket innebär att den bara behöver startas en gång, vanligtvis med samma systemstart. Cron -tjänsten kallas crond. I de flesta distributioner installeras tjänsten automatiskt och startas från systemstart, den kan verifieras på flera sätt:
 1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) körs … 
Om du har servicekommandot installerat:
 service crond status
 crond (pid 507) körs … 
det kan också granskas med kommandot ps:
 ps -ef | grep crond
om cron av någon anledning inte fungerar kan vi börja med:
 /etc/rc.d/init.d/crond start Starta crond: [OK]
[color = rgb (0,0,0)] Om tjänsten inte konfigurerades för att börja från början skulle det vara tillräckligt att lägga till den med kommandot chkconfig: [/ color]
 chkconfig -nivå 35 crond på 
Med detta skulle du lägga till det för att köra nivå 3 och 5, så att det startar vid systemstarttid.

Använda cron


Det finns minst två olika sätt att använda cron:
Den första finns i katalogen / etc, där du med största sannolikhet hittar följande kataloger:
  • cron. varje timme
  • cron.daily
  • cron. varje vecka
  • månadsvis
Om en skriptfil placeras i någon av dessa kataloger körs skriptet varje timme, varje dag, varje vecka eller varje månad, beroende på katalogen.
För att manuset ska kunna köras måste det vara något liknande följande:
 #! / bin / sh #script som genererar en backup -cd / usr / dokument tar czf * backup cp backup / other_directory /
Vi måste fixa att den första raden börjar med #!, Vilket indikerar att det är ett bash -skript, de andra raderna är kommandona som vi vill att skriptet ska köra. Detta skript kan namnges till exempel backup.sh och vi måste också ändra motsvarande behörigheter så att det kan köras, till exempel:
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 jul 20 09:30 backup.sh
"X" i ägarens behörighetsgrupp (-rwx) indikerar att det kan köras.
Om vi ​​lämnar det här skriptet i cron.time, kommer det att köras varje timme med en minut varje dag, senare kommer jag att förklara varför.
Det andra sättet att köra eller använda cron är genom att direkt manipulera filen / etc / crontab. Vid standardinstallationen av olika Linux -distributioner kommer den här filen att se ut ungefär följande:
 cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.hour 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
De fyra första raderna är variabler som anger följande:
SKALDet är "skalet" under vilket cron körs. Om den inte anges, tas den som anges på raden / etc / passwd som motsvarar användaren som kör cron som standard.
VÄGInnehåller eller anger sökvägen till katalogerna där cron letar efter kommandot som ska köras. Denna väg skiljer sig från systemets eller användarens globala sökväg.
POST TILLDet är vem kommandots utdata skickas till (om det har någon utmatning). Cron skickar ett e -postmeddelande till den som anges i denna variabel, det vill säga att den måste vara en giltig användare av systemet eller av något annat system. Om det inte anges kommer cron att skicka e -postmeddelandet till användaren som äger kommandot som körs.
HEMDet är rot- eller huvudkatalogen för cron -kommandot, om det inte anges då kommer roten att vara den som anges i filen / etc / passwd som motsvarar användaren som kör cron.
De kommentarer anges med # i början av raden.
Efter ovanstående kommer raderna som utför de ordentligt schemalagda uppgif.webpterna. Det finns inga gränser för hur många uppgif.webpter det kan vara, en per rad. Fält (De är 7) som bildar dessa linjer bildas enligt följande:
 Minuttimme DayOfMonth Month DayOf Week Användarkommando
  • Fält: Beskrivning
  • Minut: Det styr minutens minut i vilket kommandot ska köras, detta värde måste vara mellan 0 och 59.
  • Tid: Det styr tiden kommandot kommer att utföras, det anges i ett 24 -timmarsformat, värdena måste vara mellan 0 och 23, 0 är midnatt.
  • Dag i månaden: Dag i månaden där du vill utföra kommandot. Till exempel skulle 20 anges för att utföra kommandot den 20: e i månaden.
  • Månad: Månad då kommandot kommer att utföras, kan det anges numeriskt (1-12), eller med månadens namn på engelska, bara de tre första bokstäverna.
  • Veckodag: Dag i veckan kommer kommandot att utföras, det kan vara numeriskt (0-7) eller med dagens namn på engelska, bara de tre första bokstäverna. (0 och 7 = söndag)
  • Användare: Användare som utför kommandot.
  • Kommando: Kommando, skript eller program som du vill köra. Detta fält kan innehålla flera ord och mellanslag.
En asterisk * som ett värde i de fem första fälten indikerar fältets början, det vill säga allt. Ett * i minutfältet visar alla minuter.
För att bättre förstå detta av de första fem fälten och asterisken kommer jag bättre att använda flera exempel:
Exempel:
 Beskrivning 01 * * * * Går 1 minut varje timme varje dag 158 * * * 8:15 varje dag 15 20 * * * Kl. 20:15 varje dag 00 5 * * 0 Kl. 05.00 varje söndag * 5 * * sön Varje minut från kl. 05.00 klockan 5:59 varje söndag 45 19 1 * * Kl. 19.45 1: a i varje månad 01 * 20 7 * Vid 1 minut i timmen den 20 juli 10 1 * 12 1 Kl. 1:10 Varje måndag i december 00 12 16 * Ons Vid middagstid den 16: e varje månad och det är onsdag 30 9 20 7 4 Kl. 09:30 den 20 juli och det är torsdag 30 9 20 7 * Kl. 09:30 från den 20 juli oavsett veckodag 20 * * * 6 Till den 20: e minuten varje timme på lördagar 20 * * 1 6 Till den 20: e minuten varje timme på lördagar i januari 
Det är också möjligt att ange listor i fälten. Listorna kan vara i form av 1,2,3,4 eller i form av 1-4 som skulle vara desamma. Cron stöder på samma sätt ökningar i listorna, vilka anges enligt följande:
 Värde eller lista / ökning
Återigen är listor och steg lättare att förstå med exempel:
Exempel:
 Beskrivning 59 11 * 1-3 1,2,3,4,5 Kl. 11:59 Måndag till fredag, januari till mars 45 * 10-25 * 6-7 Vid 45 minuter alla timmar från 10 till 25 i alla månader och att dagen är lördag eller söndag 10,30,50 * * * 1,3,5 Vid 10, 30 och 50 minuter av alla timmar på måndag, onsdag och fredag ​​* / 15 10-14 * * * Var femton minut från 10:00 klockan 14.00 * 12 1-10 / 2 2,8 * Alla minuter klockan 12, dagarna 1,3,5,7 och 9 februari och augusti. (Ökningen i det tredje fältet är 2 och börjar från 1) 0 * / 5 1-10,15,20-23 * 3 Var 5: e timme från dag 1 till 10, dag 15 och från dag 20 till 23 i varje månad och att dagen är onsdag 3/3 2/4 2 2 2 Var tredje minut med start vid minut 3 (3,6,9, osv.) i timmarna 2,6,10 osv. (var 4: e timme med start i timme 2) den 2 februari och det är tisdag
Som kan ses i det sista exemplet, skulle cron -uppgif.webpten som tilldelades den raden med dessa data endast köras om de fem fälten (AND) är uppfyllda. Det vill säga för att uppgif.webpten ska kunna köras måste den vara tisdagen den 2 februari klockan 02:03. Det är alltid ett booleskt OCH som bara returnerar sant om alla fem fälten är sanna i den specifika minuten.
[color = rgb (0,0,0)] Det föregående fallet gör det då klart att: [/ color]
Cron -programmet anropas varje minut och utför de uppgif.webpter som dess fält utförs under den exakta minuten.
Inklusive användarfältet och kommandot kan crontab -raderna vara följande:
 0 22 * ​​* * root /usr /daglig backup.sh 0 23 * * 5 root /usr /vecka backup.sh 0 8,20 * * * jcarrillo mail -s "system körs" [email protected]
De två första raderna körs av rotanvändaren och den första körs kl. 22.00 varje dag, skriptet som genererar en daglig säkerhetskopia. Den andra kör kl. 23.00 varje fredag ​​ett skript som genererar en säkerhetskopia varje vecka. Den tredje raden körs av användaren sergio och den skulle köras 8 på morgonen och 8 på natten varje dag och kommandot är att skicka ett e -postmeddelande till kontot [email protected] med ämnet "system som fungerar", ett sätt för en administratör att vara medveten om att ett fjärrsystem är aktivt vid de angivna tidpunkterna, men om han inte får ett mejl vid dessa tillfällen är det något fel.
Att vara rot, det är möjligt då, modifiera crontab direkt:
 vim / etc / crontab 
Detta modifieras direkt.

Kör Cron med flera användare, crontab -kommando


Linux är ett system för flera användare och cron är en av applikationerna som stöder arbete med flera användare samtidigt. Varje användare kan ha sin egen crontab -fil, i själva verket antas / etc / crontab vara rotanvändarens crontab -fil, även om det inte är något problem att andra användare ingår, och därmed det sjätte fältet som anger exakt vem användaren är. som utför uppgif.webpten och som krävs i:
 / etc / crontab

Men när vanliga användare (och till och med root) vill skapa sin egen crontab -fil, då använder vi kommando crontab.
I katalogen / var / spool / cron (kan variera beroende på distribution), en cron -fil genereras för varje användare, även om den här filen är text, bör den inte redigeras direkt.
Det finns då två situationer som genererar crontab -filen direkt med kommandot:
 crontab -e
Med vilken standardredigeraren öppnas (vanligtvis vi) med filen kallad tom crontab och där användaren kommer in i sin uppgif.webptstabell och den sparas automatiskt som / var / spool / cron / user.
Det andra fallet är att användaren redigerar en normal textfil med uppgif.webpterna i uppgif.webpterna och som ett exempel namnger den 'my_cron', då kommer kommandot $> crontab my_cron att ansvara för att upprätta den som användarens cron -fil i / var / spool / cron / user:
 vi my_cron # raderar filer från delad mapp 0 20 * * * rm -f / home / sergio / shared / * # kör ett skript som säkerhetskopierar dokumentmappen den första dagen i varje månad 0 22 1 * * / home / sergio / månads support.sh # var 5: e timme från må till fre, han ser till att behörigheterna är korrekta i mitt hem 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq (the fil)> ls my_cron> crontab my_cron (inställt på / var / spool / cron / user)
Sammanfattar ovanstående och överväger andra alternativ för crontab:
 crontab file.cron (ställer in filen.cron som användarens crontab) crontab -e (öppnar den förinställda redigeraren där crontab -filen kan skapas eller redigeras) crontab -l (listar användarens aktuella crontab, deras cron -jobb) crontab -r (tar bort användarens nuvarande crontab)
På vissa distributioner när du redigerar vanliga crontabs för användare är det nödvändigt att starta om tjänsten så att crontab -filerna i / var / spool / cron kan läsas om.
 service crond starta om 
För att bättre förstå hur du startar / stoppar / startar om tjänster, i den här artikeln hittar du mer information.

Kontrollera åtkomst till cron


Cron låter dig styra vilka användare som kan eller inte kan använda crontjänsterna. Detta uppnås på ett mycket enkelt sätt genom följande filer:
  • /etc/cron.allow
  • /etc/cron.deny
För att förhindra att en användare använder cron eller snarare kommandot crontab, räcker det med att lägga till sitt användarnamn i filen /etc/cron.deny, för att tillåta dess användning skulle det vara att lägga till sitt användarnamn till /etc/cron.allow, om du av någon anledning vill neka användningen av cron till alla användare, kan du skriva ordet ALL i början av cron.deny och det skulle räcka.
 echo ALL >> / etc / cron.deny eller för att lägga till en annan användare till cron.allow echo juan >> / etc / cron.allow
Om varken cron.allow -filen eller cron.deny -filen existerar, är teorin användningen av cron utan användarrestriktioner. Att lägga till användarnamn i cron.allow, utan att skapa en cron.deny -fil, kommer att ha samma effekt som att skapa det med ordet ALL. Det betyder att när cron.allow har skapats med en enda användare måste de andra användarna som vill använda cron alltid anges i den här filen.
SlutsatserVi har pratat om dess drift, jag hoppas att du har förstått, vissa distributioner som Red Hat innehåller en variant som anakron som kan kompensera för vissa cron -brister, trots det, på alla nivåer från den mest grundläggande till den mest avancerade, cron används , är det lämpligt att förstå dess funktion. Om du hittar några frågor eller har ett förslag, tveka inte att placera det i kommentarerna.Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave