Sådan bruges Cron på Linux Unix

Hvad er cron?


Cron er navnet på det program, der giver Linux / Unix -brugere mulighed for automatisk at udføre kommandoer eller scripts (grupper af kommandoer) på et bestemt tidspunkt eller en bestemt dato. Det bruges normalt til administrative opgavekommandoer, f.eks. Sikkerhedskopier, men det kan bruges til at køre alt. Som defineret på cron man siderne; det er en dæmon, der udfører planlagte programmer.
I praktisk talt alle Linux -distributioner bruges Vixie Cron -versionen af ​​den person, der udviklede den, som er Paul Vixie, en af ​​Unix 'store guruer, også skaber blandt andre systemer af BIND, som er en af ​​de mest populære DNS -servere i verden.

Start cron


Cron er en dæmon (service), hvilket betyder, at den kun skal startes én gang, normalt med den samme systemstart. Cron -tjenesten kaldes crond. I de fleste distributioner installeres tjenesten automatisk og startes fra systemstart, den kan verificeres på flere måder:
 1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) kører … 
Hvis du har installeret servicekommandoen:
 service crond status
 crond (pid 507) kører … 
det kan også gennemgås via kommandoen ps:
 ps -ef | grep crond
hvis cron af en eller anden grund ikke virker, kan vi starte det med:
 /etc/rc.d/init.d/crond start Start crond: [OK]
[color = rgb (0,0,0)] Hvis tjenesten ikke var konfigureret til at starte fra begyndelsen, ville det være nok at tilføje den med kommandoen chkconfig: [/ color]
 chkconfig -niveau 35 crond on 
Med dette ville du tilføje det til at køre niveau 3 og 5, så det starter ved systemstarttid.

Brug af cron


Der er mindst to forskellige måder at bruge cron på:
Den første er i mappen / etc, hvor du højst sandsynligt finder følgende mapper:
  • kr. hver time
  • cron.daily
  • kr. hver uge
  • kr. månedligt
Hvis en scriptfil er placeret i et af disse biblioteker, kører scriptet hver time, hver dag, hver uge eller hver måned, afhængigt af biblioteket.
For at scriptet skal eksekveres, skal det være noget, der ligner følgende:
 #! / bin / sh #script, der genererer en backup -cd / usr / documents tar czf * backup cp backup / other_directory /
Vi skal rette op på, at den første linje begynder med #!, Hvilket angiver, at det er et bash shell -script, de andre linjer er de kommandoer, som vi vil have scriptet til at udføre. Dette script kan navngives for eksempel backup.sh, og vi skal også ændre de tilsvarende tilladelser, så det kan udføres, for eksempel:
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 juli 20 09:30 backup.sh
"X" i ejerens tilladelsesgruppe (-rwx) angiver, at det kan udføres.
Hvis vi forlader dette script i kron. Time, vil det blive udført hver time med et minut hver dag, senere vil jeg forklare hvorfor.
Den anden måde at køre eller bruge cron på er ved direkte at manipulere filen / etc / crontab. Ved standardinstallationen af ​​forskellige Linux -distributioner vil denne fil se sådan ud:
 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.månedligt
De fire første linjer er variabler, der angiver følgende:
SKALDet er den 'skal', hvorunder kronen løber. Hvis den ikke er angivet, vil den, der er angivet i linjen / etc / passwd, der svarer til den bruger, der udfører cron, blive taget som standard.
STIIndeholder eller angiver stien til de mapper, hvor cron vil lede efter kommandoen, der skal udføres. Denne sti er forskellig fra systemets eller brugerens globale sti.
POST TILDet er hvem output fra kommandoen sendes til (hvis den har noget output). Cron sender en e -mail til den, der er angivet i denne variabel, det vil sige, at den skal være en gyldig bruger af systemet eller af et andet system. Hvis det ikke er angivet, sender cron mailen til den bruger, der ejer kommandoen, der udføres.
HJEMDet er rod- eller hovedmappen i cron -kommandoen, hvis det ikke er angivet, vil roden være den, der er angivet i filen / etc / passwd, der svarer til den bruger, der udfører cron.
Det kommentarer er angivet med # i begyndelsen af ​​linjen.
Efter ovenstående kommer de linjer, der udfører de korrekt planlagte opgaver. Der er ingen grænser for, hvor mange opgaver der kan være, en pr. Linje. Felter (De er 7) der danner disse linjer dannes som følger:
 Minut Time DayOfMonth Month DayOf Week Brugerkommando
  • Mark: Beskrivelse
  • Minut: Den styrer minuttet i den time, hvor kommandoen skal udføres, denne værdi skal være mellem 0 og 59.
  • Tid: Den styrer den tid, kommandoen vil blive udført, den er angivet i et 24 -timers format, værdierne skal være mellem 0 og 23, 0 er midnat.
  • Dag i måneden: Dag i den måned, hvor du vil udføre kommandoen. For eksempel vil 20 blive angivet for at udføre kommandoen den 20. i måneden.
  • Måned: Måned, hvor kommandoen vil blive udført, kan den angives numerisk (1-12), eller med månedens navn på engelsk, kun de tre første bogstaver.
  • Ugedag: Dag i ugen vil kommandoen blive udført, den kan være numerisk (0-7) eller ved dagens navn på engelsk, kun de tre første bogstaver. (0 og 7 = søndag)
  • Bruger: Bruger, der udfører kommandoen.
  • Kommando: Kommando, script eller program, du vil køre. Dette felt kan indeholde flere ord og mellemrum.
En stjerne * som en værdi i de fem første felter angiver feltets begyndelse, det vil sige alt. Et * i minutfeltet angiver alle minutter.
For bedre at forstå dette af de første 5 felter og stjernen vil jeg bedre bruge flere eksempler:
Eksempel:
 Beskrivelse 01 * * * * Kører 1 minut i hver time hver dag 158 * * * Kl. 8:15 hver dag 15 20 * * * Kl. 20:15 hver dag 00 5 * * 0 Kl. hver søndag * 5 * * sø Hvert minut fra kl. 5:00 kl. 5:59 hver søndag 45 19 1 * * Kl. 19:45 1. i hver måned 01 * 20 7 * Ved 1 minut i hver time den 20. juli 10 1 * 12 1 Kl. 1:10 Hver mandag i december 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. 9:30 fra den 20. juli uanset ugedag 20 * * * 6 Til det 20. minut i hver time om lørdagen 20 * * 1 6 Til det 20. minut i hver time på lørdage i januar 
Det er også muligt at angive lister i felterne. Listerne kan være i form af 1,2,3,4 eller i form af 1-4, hvilket ville være det samme. Cron understøtter på samme måde stigninger i listerne, som er angivet som følger:
 Værdi eller liste / stigning
Igen er lister og trin lettere at forstå med eksempler:
Eksempel:
 Beskrivelse 59 11 * 1-3 1,2,3,4,5 Kl. 11:59 Mandag til fredag, januar til marts 45 * 10-25 * 6-7 Ved 45 minutter af 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 10, 30 og 50 minutter af alle timer mandag, onsdag og fredag ​​* / 15 10-14 * * * Hvert femte minut fra 10:00 kl. 14.00 * 12 1-10 / 2 2,8 * Alle minutter fra klokken 12, dagene 1,3,5,7 og 9. februar og august. (Forøgelsen i det tredje felt 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. minut med start i minut 3 (3,6,9 osv.) i timer 2,6,10 osv. (hver 4. time fra time 2) den 2. februar, og det er tirsdag
Som det kan ses i det sidste eksempel, ville cron -opgaven, der blev tildelt den række med disse data, kun udføres, hvis de 5 felter (AND) er opfyldt. Det vil sige, at opgaven skal køre den skal være tirsdag den 2. februar klokken 02:03. Det er altid en boolsk OG, der kun returnerer sandt, hvis alle 5 felter er sande i det specifikke minut.
[color = rgb (0,0,0)] Den tidligere sag gør det derefter klart, at: [/ color]
Cron -programmet påberåbes hvert minut og udfører de opgaver, dets felter udføres i det præcise minut.
Inklusive brugerfeltet og kommandoen kunne crontab -linjerne derefter være som følger:
 0 22 * ​​* * root /usr /daglig backup.sh 0 23 * * 5 root /usr /ugentlig backup.sh 0 8,20 * * * jcarrillo mail -s "system kører" [email protected]
De to første linjer udføres af rodbrugeren, og den første udfører hver dag kl. 22.00 det script, der genererer en daglig backup. Den anden udfører kl. 23.00 hver fredag ​​et script, der genererer en ugentlig backup. Den tredje linje udføres af brugeren sergio, og den ville blive udført klokken 8 om morgenen og 8 om natten hver dag, og kommandoen er at sende en e -mail til kontoen [email protected] med emnet "system fungerer", en måde for en administrator at være opmærksom på, at et fjernsystem er aktivt på de angivne tidspunkter, men hvis han ikke modtager en e -mail på det tidspunkt, er der noget galt.
At være rod, det er da muligt, direkte ændre crontab:
 vim / etc / crontab 
Dette er direkte modificeret.

Kører Cron med flere brugere, crontab -kommando


Linux er et multi-user system og cron er en af ​​de applikationer, der understøtter arbejde med flere brugere på samme tid. Hver bruger kan have sin egen crontab -fil, faktisk antages / etc / crontab at være rodbrugerens crontab -fil, selvom der ikke er noget problem, at andre brugere er inkluderet, og dermed det sjette felt, der angiver præcist, hvem brugeren er. som udfører opgaven og er påkrævet i:
 / etc / crontab

Men når normale brugere (og endda rod) ønsker at generere deres egen crontab -fil, så vil vi bruge crontab -kommando.
I biblioteket / var / spool / cron (kan variere afhængigt af fordelingen), genereres en cron -fil for hver bruger, selvom denne fil er tekst, bør den ikke redigeres direkte.
Der er derefter to situationer, der direkte genererer crontab -filen med kommandoen:
 crontab -e
Med hvilken standardeditoren åbnes (generelt vi) med filen kaldet tom crontab, og hvor brugeren kommer ind i sin opgavetabel, og den gemmes automatisk som / var / spool / cron / user.
Den anden sag er, at brugeren redigerer en normal tekstfil med opgaverne og som et eksempel navngiver den 'my_cron', så er kommandoen $> crontab my_cron ansvarlig for at etablere den som brugerens cron -fil i / var / spool / cron / bruger:
 vi my_cron # sletter filer fra delt mappe 0 20 * * * rm -f / home / sergio / shared / * # udfører et script, der udfører en sikkerhedskopi af dokumentmappen den første dag 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 tilladelserne er korrekte i mit hjem 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq (the fil)> ls my_cron> crontab my_cron (indstillet til / var / spool / cron / user)
Opsummerer ovenstående og overvejer andre muligheder for crontab:
 crontab file.cron (indstiller file.cron som brugerens crontab) crontab -e (åbner den forudindstillede editor, hvor crontab -filen kan oprettes eller redigeres) crontab -l (viser brugerens aktuelle crontab, deres cron -job) crontab -r (fjerner brugerens nuværende crontab)
På nogle distributioner ved redigering af almindelige bruger crontabs er det nødvendigt at genstarte tjenesten, så crontab -filerne i / var / spool / cron kan genlæses.
 service crond genstart 
For bedre at forstå, hvordan du starter / stopper / genstarter tjenester, finder du i denne artikel flere oplysninger.

Kontrol af adgang til cron


Cron giver dig mulighed for at kontrollere, hvilke brugere der kan eller ikke kan bruge cron -tjenesterne. Dette opnås på en meget enkel måde gennem følgende filer:
  • /etc/cron.allow
  • /etc/cron.deny
For at forhindre en bruger i at bruge cron eller rettere crontab -kommandoen, er det nok at tilføje deres brugernavn til filen /etc/cron.deny, for at tillade brug, ville det være at tilføje deres brugernavn til /etc/cron.allow, hvis du af en eller anden grund ønsker at nægte brugen af ​​cron til alle brugere, kan du skrive ordet ALL i begyndelsen af ​​cron.deny, og det ville være tilstrækkeligt.
 ekko ALLE >> / etc / cron.deny eller for at tilføje en anden bruger til cron.allow ekko juan >> / etc / cron.allow
Hvis der hverken findes cron.allow -filen eller cron.deny -filen, er brugen af ​​cron i teorien uden brugerrestriktioner. Tilføjelse af brugernavne i cron.allow, uden at oprette en cron.deny -fil, vil have samme effekt som at oprette det med ordet ALL. Det betyder, at når cron.allow er blevet oprettet med en enkelt bruger, skal de andre brugere, der vil bruge cron, altid angives i denne fil.
KonklusionerVi har talt om dets drift, jeg håber, du har forstået, nogle distributioner som Red Hat indeholder en variant som anacron, der kan gøre op med nogle cron -mangler, selv om det bruges på ethvert niveau fra den mest basale til den mest avancerede, cron bruges , er det tilrådeligt at forstå dens funktion. Hvis du finder spørgsmål eller har et forslag, tøv ikke med at placere det i kommentarerne.Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave