Slik bruker du Cron på Linux Unix

Hva er Cron?


Cron er navnet på programmet som lar Linux / Unix -brukere automatisk utføre kommandoer eller skript (grupper av kommandoer) på et bestemt tidspunkt eller en bestemt dato. Den brukes vanligvis til administrative oppgavekommandoer, for eksempel sikkerhetskopier, men den kan brukes til å kjøre alt. Som definert på cron man -sidene; det er en demon som kjører planlagte programmer.
I praktisk talt alle Linux -distribusjoner brukes Vixie Cron -versjonen, av personen som utviklet den, som er Paul Vixie, en av de store guruer til Unix, også skaperen, blant andre systemer, av BIND som er en av DNS -serverne som er mest populære i verden.

Start cron


Cron er en demon (tjeneste), noe som betyr at den bare trenger å startes en gang, vanligvis med samme systemstart. Cron -tjenesten kalles crond. I de fleste distribusjoner installeres tjenesten automatisk og startes fra systemstart, den kan verifiseres på flere måter:
 1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) kjører … 
Hvis du har installert servicekommandoen:
 service crond status
 crond (pid 507) kjører … 
den kan også gjennomgås via kommandoen ps:
 ps -ef | grep crond
hvis cron av en eller annen grunn ikke fungerer, kan vi starte det med:
 /etc/rc.d/init.d/crond start Startkrond: [OK]
[color = rgb (0,0,0)] Hvis tjenesten ikke var konfigurert til å starte fra begynnelsen, ville det være nok å legge den til med chkconfig -kommandoen: [/ color]
 chkconfig -nivå 35 crond on 
Med dette vil du legge det til for å kjøre nivå 3 og 5, slik at det starter ved systemstarttid.

Bruker cron


Det er minst to forskjellige måter å bruke cron på:
Den første er i / etc -katalogen, hvor du mest sannsynlig finner følgende kataloger:
  • cron. hver time
  • cron.daily
  • cron. ukentlig
  • månedlig
Hvis en skriptfil er plassert i noen av disse katalogene, vil skriptet kjøre hver time, hver dag, hver uke eller hver måned, avhengig av katalogen.
For at skriptet skal kjøres må det være noe som ligner på følgende:
 #! / bin / sh #script som genererer en backup -cd / usr / documents tar czf * backup cp backup / other_directory /
Vi må fikse at den første linjen begynner med #!, Som indikerer at det er et bash shell -skript, de andre linjene er kommandoene som vi vil at scriptet skal utføre. Dette skriptet kan navngis for eksempel backup.sh, og vi må også endre de tilsvarende tillatelsene slik at det kan utføres, for eksempel:
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 jul 20 09:30 backup.sh
"X" i eierens tillatelsesgruppe (-rwx) indikerer at den kan utføres.
Hvis vi lar dette skriptet stå i kr. Time, vil det bli utført hver time med ett minutt hver dag, senere vil jeg forklare hvorfor.
Den andre måten å kjøre eller bruke cron på er å manipulere filen / etc / crontab direkte. På standardinstallasjonen av forskjellige Linux -distribusjoner vil denne filen se omtrent slik ut:
 cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.time 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 fire første linjene er variabler som indikerer følgende:
SKALLDet er 'skallet' som kronen løper under. Hvis den ikke er spesifisert, vil den som er angitt i / etc / passwd -linjen som tilsvarer brukeren som utfører cron, bli tatt som standard.
STIInneholder eller angir banen til katalogene der cron vil lete etter kommandoen som skal utføres. Denne banen er forskjellig fra den globale banen til systemet eller brukeren.
POST TILDet er hvem utdataene fra kommandoen sendes til (hvis den har noen utdata). Cron sender en e -post til den som er spesifisert i denne variabelen, det vil si at den må være en gyldig bruker av systemet eller et annet system. Hvis ikke spesifisert, vil cron sende e -posten til brukeren som eier kommandoen som utføres.
HJEMDet er roten eller hovedkatalogen til cron -kommandoen, hvis ikke det er angitt da, vil roten være den som er angitt i / etc / passwd -filen som tilsvarer brukeren som kjører cron.
De kommentarene er angitt med # i begynnelsen av linjen.
Etter det ovennevnte kommer linjene som utfører de riktig planlagte oppgavene. Det er ingen grenser for hvor mange oppgaver det kan være, én per linje. Enger (De er 7) som danner disse linjene, dannes som følger:
 Minutt Time DayOfMonth Month DayOf Week Brukerkommando
  • Felt: Beskrivelse
  • Minutt: Den styrer minuttet i timen som kommandoen skal utføres, denne verdien må være mellom 0 og 59.
  • Tid: Den styrer tiden kommandoen vil bli utført, den er spesifisert i et 24 -timers format, verdiene må være mellom 0 og 23, 0 er midnatt.
  • Dag i måneden: Dag i måneden du vil utføre kommandoen. For eksempel vil 20 bli angitt for å utføre kommandoen den 20. i måneden.
  • Måned: Måneden da kommandoen skal utføres, kan den angis numerisk (1-12), eller med månedens navn på engelsk, bare de tre første bokstavene.
  • Ukedag: Dag i uken vil kommandoen bli utført, den kan være numerisk (0-7) eller med dagens navn på engelsk, bare de tre første bokstavene. (0 og 7 = søndag)
  • Bruker: Bruker som utfører kommandoen.
  • Kommando: Kommando, skript eller program du vil kjøre. Dette feltet kan inneholde flere ord og mellomrom.
En stjerne * som en verdi i de fem første feltene vil indikere begynnelsen på slutten av feltet, det vil si alt. Et * i minuttfeltet angir alle minuttene.
For bedre å forstå dette av de fem første feltene og stjernen vil jeg bedre bruke flere eksempler:
Eksempel:
 Beskrivelse 01 * * * * Går 1 minutt hver time hver dag 158 * * * Kl. 08.15 hver dag 15 20 * * * Kl. 20:15 hver dag 00 5 * * 0 Kl. 05.00 hver søndag * 5 * * sø Hvert minutt fra kl. 05.00 kl. 5:59 hver søndag 45 19 1 * * Kl. 19.45 1. i hver måned 01 * 20 7 * Ved 1 minutt i hver time 20. juli 10 1 * 12 1 Kl. 1:10 Hver mandag i desember 00 12 16 * ons middag kl. 16 i hver måned og det er onsdag 30 9 20 7 4 kl. 9:30 20. juli og det er torsdag 30 9 20 7 * Kl. 09.30 fra 20. juli uavhengig av ukedag 20 * * * 6 Til 20. minutt i hver time på lørdager 20 * * 1 6 Til 20. minutt i hver time på lørdager i januar 
Det er også mulig å spesifisere lister i feltene. Listene kan være i form av 1,2,3,4 eller i form av 1-4 som ville være det samme. Cron støtter på samme måte økninger i listene, som er angitt som følger:
 Verdi eller liste / økning
Igjen, lister og trinn er lettere å forstå med eksempler:
Eksempel:
 Beskrivelse 59 11 * 1-3 1,2,3,4,5 Kl. 11:59 Mandag til fredag, januar til mars 45 * 10-25 * 6-7 Ved 45 minutter i alle timer fra 10 til 25 i alle måneder og at dagen er lørdag eller søndag 10,30,50 * * * 1,3,5 Kl. 10, 30 og 50 minutter av alle timer på mandag, onsdag og fredag ​​* / 15 10-14 * * * Hvert femte minutt fra 10:00 kl. 14.00 * 12 1-10 / 2 2,8 * Alle referatene klokken 12, dagene 1,3,5,7 og 9. februar og august. (Økningen i det tredje feltet er 2 og starter fra 1) 0 * / 5 1-10,15,20-23 * 3 Hver 5. time fra dag 1 til 10, dag 15 og fra dag 20 til 23 i hver måned og at dagen er onsdag 3/3 2/4 2 2 2 Hvert 3. minutt fra minutt 3 (3,6,9 osv.) i timene 2,6,10 osv. (hver fjerde time fra time 2) 2. februar og det er tirsdag
Som det kan sees i det siste eksemplet, ville cron -oppgaven som ble tilordnet den raden med disse dataene, bare utføres hvis de fem feltene (AND) er oppfylt. Det vil si at oppgaven skal kjøres må være tirsdag 2. februar klokken 02:03. Det er alltid en boolsk OG som bare returnerer true hvis alle 5 feltene er sanne i det spesifikke minuttet.
[color = rgb (0,0,0)] Den forrige saken gjør det da klart at: [/ color]
Cron -programmet påkalles hvert minutt og utfører oppgavene som feltene er oppfylt i det presise minuttet.
Inkludert brukerfeltet og kommandoen, kan crontab -linjene da være som følger:
 0 22 * ​​* * root /usr /daglig backup.sh 0 23 * * 5 root /usr /ukentlig backup.sh 0 8,20 * * * jcarrillo mail -s "system running" [email protected]
De to første linjene utføres av rotbrukeren, og den første kjører klokken 22.00 hver dag scriptet som genererer en daglig sikkerhetskopi. Den andre kjører kl. 23.00 hver fredag ​​et skript som genererer en ukentlig sikkerhetskopi. Den tredje linjen kjøres av brukeren sergio, og den vil bli utført klokken 8 om morgenen og 8 om kvelden hver dag, og kommandoen er å sende en e -post til kontoen [email protected] med emnet "systemet fungerer", en måte for en administrator å være klar over at et eksternt system er aktivt på de angitte tidspunktene, men hvis han ikke mottar en e -post på det tidspunktet, er det noe galt.
Å være rot, det er mulig da, endre crontab direkte:
 vim / etc / crontab 
Dette er direkte modifisert.

Kjører Cron med flere brukere, crontab -kommando


Linux er et flerbrukersystem og cron er en av applikasjonene som støtter arbeid med flere brukere samtidig. Hver bruker kan ha sin egen crontab -fil, faktisk antas / etc / crontab å være rotbrukerens crontab -fil, selv om det ikke er noe problem at andre brukere er inkludert, og dermed det sjette feltet som angir nøyaktig hvem brukeren er. som utfører oppgaven og er nødvendig i:
 / etc / crontab

Men når vanlige brukere (og til og med rot) ønsker å generere sin egen crontab -fil, så bruker vi crontab -kommando.
I katalogen / var / spool / cron (kan variere avhengig av distribusjonen), genereres en cron -fil for hver bruker, selv om denne filen er tekst, bør den ikke redigeres direkte.
Det er da to situasjoner som genererer crontab -filen direkte med kommandoen:
 crontab -e
Som standardredigereren vil åpne (vanligvis vi) med filen kalt tom crontab og hvor brukeren kommer inn i oppgavetabellen, og den blir automatisk lagret som / var / spool / cron / user.
Det andre tilfellet er at brukeren redigerer en normal tekstfil med oppføringene i oppgavene og som et eksempel navngir den 'my_cron', så er kommandoen $> crontab my_cron ansvarlig for å etablere den som brukerens cron -fil i / var / spole / cron / user:
 vi my_cron # sletter filer fra delt mappe 0 20 * * * rm -f / home / sergio / shared / * # utfører et skript som utfører en sikkerhetskopi av dokumentmappen den første dagen i hver måned 0 22 1 * * / home / sergio / månedlig support.sh # hver 5. time fra man til fre, sørger han for at tillatelsene er riktige i mitt hjem 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq ( fil)> ls my_cron> crontab my_cron (satt til / var / spool / cron / user)
Oppsummerer ovenstående og vurderer andre alternativer for crontab:
 crontab file.cron (setter filen .cron som brukerens crontab) crontab -e (åpner den forhåndsinnstilte editoren der crontab -filen kan opprettes eller redigeres) crontab -l (viser brukerens nåværende crontab, cronjobber) crontab -r (fjerner brukerens nåværende crontab)
På noen distribusjoner når du redigerer vanlige bruker -crontabs, er det nødvendig å starte tjenesten på nytt slik at crontab -filene i / var / spool / cron kan leses på nytt.
 service crond restart 
For bedre å forstå hvordan du starter / stopper / starter tjenester på nytt, finner du mer informasjon i denne artikkelen.

Kontrollerer tilgang til cron


Cron lar deg kontrollere hvilke brukere som kan eller ikke kan bruke cron -tjenestene. Dette oppnås på en veldig enkel måte gjennom følgende filer:
  • /etc/cron.allow
  • /etc/cron.deny
For å forhindre at en bruker bruker cron eller rettere sagt crontab -kommandoen, er det nok å legge til brukernavnet sitt i /etc/cron.deny -filen, for å tillate bruk, ville det være å legge til brukernavnet sitt i /etc/cron.allow, Hvis du av en eller annen grunn vil nekte bruk av cron til alle brukere, kan du skrive ordet ALL i begynnelsen av cron.deny, og det ville være nok.
 ekko ALL >> / etc / cron.deny eller for å legge til en annen bruker på cron.allow echo juan >> / etc / cron.allow
Hvis verken cron.allow -filen eller cron.deny -filen eksisterer, er bruken av cron i teorien uten brukerbegrensninger. Å legge til brukernavn i cron.allow, uten å lage en cron.deny -fil, vil ha samme effekt som å lage det med ordet ALL. Dette betyr at når cron.allow er opprettet med en enkelt bruker, må de andre brukerne som vil bruke cron alltid spesifiseres i denne filen.
KonklusjonerVi har snakket om driften, jeg håper du har forstått, noen distribusjoner som Red Hat inkluderer en variant som anacron som kan gjøre opp for noen cron -mangler, selv om det brukes på alle nivåer fra det mest grunnleggende til det mest avanserte, cron , er det tilrådelig å forstå hvordan den fungerer. Hvis du finner spørsmål eller har et forslag, ikke nøl med å legge det i kommentarene.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave