Hvis du bruger Linux dagligt, vil du før eller siden få brug for det Automatiser gentagne opgaver med Cron og CrontabSikkerhedskopier, opdateringer, rapportgenerering, filoprydning, overvågning… Alt dette manuelt er tidskrævende og let at glemme. Det er her, Cron kommer ind i billedet, en hjørnesten i Unix- og GNU/Linux-systemadministration i årtier.
Selvom Crontab-syntaksen ved første øjekast kan virke lidt skræmmende, vil du, når du først forstår dens logik, se, at Planlægning af opgaver i Linux med Crontab er meget nemmere end det ser ud til.Denne artikel giver en omfattende guide: hvad Cron er, hvad Crontab er, hvordan man skriver regler, hvordan man fejlfinder, dens potentielle indvirkning på ydeevnen, eksterne værktøjer, du kan bruge, alternativer i andre systemer og både hjemme- og forretningsmæssige brugsscenarier.
Forskelle mellem Cron og Crontab
Cron og Crontab bliver ofte omtalt, som om de var det samme, men i virkeligheden De er to forskellige dele, der fungerer sammen.Hvis du forstår denne forskel, sparer du dig for en masse problemer, når du skal foretage fejlfinding af opgaver, der ikke kører.
- Cron Det er dæmonen, der kører i baggrunden fra det øjeblik systemet starter. Dens opgave er meget simpel: gennemgå en række konfigurationsfiler hvert minut og kontroller, om der skal udføres planlagte opgaver i henhold til systemets dato og klokkeslæt.
- crontabFor sin del er det tekstfil, hvor disse opgaver er defineretHver bruger kan have sin egen crontab-fil med sine regler og scripts, som udføres med brugerens tilladelser. Cron-daemonen læser disse filer og kører kommandoerne, når det er passende.
I enhver moderne Linux-distribution finder du begge komponenter tilgængelige som standard, så Du kan planlægge tilbagevendende opgaver i stort set enhver distribution, hvad enten det er Debian, Ubuntu, Oracle Linux, CentOS, Rocky, Fedora osv.
Hvad er Cron, og hvorfor er systemet tidskritisk?
Cron er en systemdæmon, der starter, når Linux starterDen startes normalt via klassiske boot-scripts i /etc/init.d eller på tilsvarende ruter som f.eks. /etc/rc.deller ved at bruge systemd-enheder (service crond eller cron, afhængigt af distributionen). Den tjekker hvert minut:
/etc/crontab, /etc/cron.d, /var/spool/cron og /var/spool/cron/crontabs (Den nøjagtige sti varierer afhængigt af fordelingen), søger efter poster, der matcher det aktuelle minut. Hvis den finder nogen, udfører den den angivne kommando.
Noget som mange overser er, at Cron er fuldstændig afhængig af systemtidenHvis uret eller tidszonen er forkert indstillet, vil dine opgaver køre på de forkerte tidspunkter. For at kontrollere tiden på moderne systemer kan du bruge:
timedatectl
Denne kommando viser lokal tid, UTC, tidszone og om systemet synkroniserer med NTP-servere (Network Time Protocol). Ideelt set NTP-synkronisering er aktivfordi uret på den måde korrigerer sig selv automatisk.
Hvis du ser, at tidszonen er forkert, kan du ændre den med noget i retning af timedatectl sæt-tidszone Europa/Madrid eller en anden zone, der matcher dit land. I mange Linux-installationer konfigureres NTP også automatisk, men hvis du vil tilpasse det, kan du... /etc/ntp.conf eller brug alternative tjenester som chrony.
Hvad er Crontab, og hvordan er det struktureret?
Crontab er den filen hvor du skriver udførelsesreglerne for dine planlagte opgaverHver linje (ignorering af kommentarer) repræsenterer et "job": hvornår det kører, og hvilken kommando der udføres. Typisk har hver bruger sin egen crontab i spool-mappen. / var / spole / cron o /var/spool/cron/crontabs, ifølge distributionen.
For at administrere din personlige crontab skal du bruge kommandoen crontab med adskillige meget grundlæggende, men effektive muligheder. Filerne redigeres ikke manuelt med en raw-editor, men snarere via denne kommando for at undgå tilladelses- eller formateringsfejl.
Den grundlæggende syntaks for en enkelt linje i Crontab er baseret på fem tidsfelter plus kommandoen:
m h dom mon dow comando
- Minut (m): værdier fra 0 til 59.
- Tid (h): værdier fra 0 til 23.
- Månedens dag (Søn): fra 1 til 31.
- Måned (man): fra 1 til 12 eller forkortet navn (jan, feb osv., afhængigt af systemet).
- Ugedag (ned): fra 0 til 6 eller 0 til 7, hvor søndag er 0 (og nogle gange også 7).
- kommandoenhver kommando, du kan køre i terminalen, inklusive scripts og omdirigeringer.
Et typisk eksempel ville være:
00 19 * * * /home/usuario/scripts/backup.sh
Denne linje angiver, at scriptet vil blive udført hver dag kl. 19.00 (kl. 7), uanset månedens, månedens eller ugedagen.
Sådan opretter, redigerer og viser du din Crontab
For at arbejde med din personlige opgavefil bruger du næsten altid selve kommandoen. crontab. Ideen er, at Rediger ikke filerne i /var/spool/cron/crontabs manuelt, da de er designet til at blive administreret automatisk af systemet.
De mest almindelige ordrer er:
- crontab -eÅbn din crontab i din standard teksteditor (i mange distributioner) vim o nano) for at oprette eller ændre poster.
- crontab-lviser alle de opgaver, der er planlagt for din bruger, på skærmen.
- crontab -rSlet hele din crontab; dette er en handling, der ikke kan fortrydes. Den beder ikke om bekræftelse, hvis du ikke tilføjer -i.
- crontab -i -r: beder om bekræftelse før sletning af crontab'en.
- crontab-filErstat din nuværende crontab med indholdet af den angivne fil.
- crontab -u bruger: administrer en anden brugers crontab (kun root eller dem med tilladelser).
- crontab -c dirPå systemer, der understøtter det, definerer den mappe, hvor crontab'en skal gemmes.
Hvis du vil sikkerhedskopiere dine indstillinger, kan du gøre noget så simpelt som:
crontab -l > ~/crontab_backup.txt
Og hvis du har brug for at gendanne det senere, skal du blot:
crontab ~/crontab_backup.txt
Avanceret syntaks: specialtegn i Crontab
Udover tal giver Crontab dig mulighed for at bruge Specialtegn, der gør syntaksen meget mere fleksibelTakket være dem kan du udtrykke intervaller, lister eller intervaller på en kompakt måde.
- * (stjerne): angiver "alle mulige værdier" i det pågældende felt. For eksempel, * i feltet for timer Det betyder alle timerne.
- , (spise): separat en liste over specifikke værdier. eksempel:
0 6,18 * * *Den kører klokken 18:00 og 6:00. - - (manuskript)definerer en kontinuerlig rækkevidde. eksempel:
0 8-17 * * 1-5Den kører hver time fra kl. 8 til 17, mandag til fredag. - / (skråstreg): marker én trin eller interval. For eksempel
*/10 * * * *betyder "hvert 10. minut". - rækkevidde/undtagen (afhængigt af implementeringen): nogle varianter tillader definition af ekskluderede værdier, selvom dette ikke er standard i alle cron-job.
Et typisk eksempel på kombineret brug ville være:
*/5 2 * * 1-5 /bin/ejecutar/script.sh
Denne linje starter kommandoen hvert 5. minut i time 2 (2:00) fra mandag til fredagDet er en kompakt måde at erstatte en lang liste af minutter på.
Karakteren # (blok) i begyndelsen af linjen tjener den til tilføj kommentarerAlt efter dette symbol på samme linje ignoreres, hvilket er perfekt til at dokumentere, hvorfor et job findes, eller til midlertidigt at deaktivere det uden at slette det.
Nøgleord og tidsgenveje i Crontab
For de mest almindelige tilfælde tilbyder Crontab genveje i form af "reserverede ord" Disse erstatter alle tidsfelter. De er meget nyttige, når du vil have noget i retning af "hver dag" eller "hver time" uden at tænke på tal.
- @genstart: udfører kommandoen når systemet starter op.
- @årligt o @årligten gang om året, svarende til 0 0 1 1 *.
- @månedligen gang om måneden, den første dag ved midnat, svarende til 0 0 1 * *.
- @ugentligen gang om ugen, ved midnat på dag 0 (normalt søndag), svarende til 0 0 * * 0.
- @daglig o @midnatén gang om dagen, kl. 00:00, svarende til 0 0 * * *.
- @hver timeen gang i timen, i minut 0, svarende til 0 * * * *.
Hvis du for eksempel vil have et script til at køre hver time, nok med:
@hourly /bin/ejecutar/script.sh
Og hvis du vil have et vedligeholdelsesscript til at starte efter hver genstartDu ville bruge:
@reboot /ruta/a/mi_script.sh
Miljøvariabler og kommandosyntaks
En typisk kilde til fejl er, at Cron kører i et minimalt miljøDen oplader ikke din .bashrc heller ikke hele dit brugermiljø, så STIEN er meget begrænset (det er normalt noget i retning af /usr/bin:/binDette gør kommandoer som Python, Git, PHP eller Pip De kan ikke findes, hvis du ikke bruger den absolutte sti.
For at undgå dette har du to muligheder: Brug altid komplette ruter i dine manuskripter (for eksempel /usr/bin/python3 i stedet for python) o Definer miljøvariablerne i starten af din crontabEt eksempel ville være:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
HOME=/home/usuario
Disse linjer placeres i begyndelsen af crontab-filen, uden tidsfelterog påvirke de andre job, du angiver nedenfor. Du kan også definere MAILTO for at angive, til hvilken e-mailadresse standard- og fejloutputtet fra jobbene sendes.
Husk Kommandoer i Crontab accepterer al shell-syntaksDu kan omdirigere output til en fil, kæde kommandoer sammen med pipes osv. For eksempel til Gem alt scriptoutput i en logfil:
* * * * * /home/usuario/helloworld.sh >> /var/log/logs.log 2>&1
Og hvis du vil Slå beskeder helt fra og modtag ikke e-mails For det job kan du omdirigere til / Dev / null:
* * * * * /home/usuario/helloworld.sh >/dev/null 2>&1
Outputhåndtering: logfiler og e-mail
Afhængigt af distributionen og konfigurationen kan Cron-output håndteres på flere måder. På systemer som Oracle Linux eller minimal Debian, hvis der ikke er installeret en mailagent, Cron-daemonen sender outputtet direkte til loggingsystemet..
I mange tilfælde kan du se cron-aktivitet i filer som f.eks.:
- /var/log/cron (typisk i Oracle Linux, CentOS, RHEL).
- / Var / log / syslog (almindelig i Debian og derivater).
For eksempel for filtrer kun beskeder relateret til cron På et system, der bruger syslog, kan du gøre noget lignende:
grep CRON /var/log/syslog
Oplysningerne er normalt korte (tidspunkt, bruger, kommando), men de hjælper dig med at se, om noget kører, eller om det fejler.
Hvis du installerer en Mail Transport Agent (MTA) som f.eks. Postfix eller Sendmail, så sendes outputtet fra jobbene til brugerens lokale mailkøDen opbevares normalt i /var/spool/mail/$BRUGER eller lignende ruter, og du kan læse den med værktøjer som mailx (kommando mail).
Derudover kan du kontrollere modtageren af cron-e-mails ved hjælp af variablen MAILTO i begyndelsen af crontab'en:
MAILTO="tu.correo@ejemplo.com"
Hvis du i stedet lader MAILTO stå tomt, sådan her:
MAILTO=""
Derefter Der vil ikke blive sendt e-mails til nogen af de job, der er defineret i den crontab.Dette er nyttigt, hvis du har mange opgaver, der genererer konstant output.

Værktøjer og hjælpeprogrammer til at arbejde med Cron
Hvis du ikke er tryg ved at skrive cron-udtryk i hånden, er der flere Værktøjer, der hjælper dig med at generere regler uden at lave fejlNogle er webtjenester, andre er grafiske applikationer.
- Crontab Guru: En meget praktisk side, hvor du skriver et cron-udtryk, og det... Forklar i en læsbar tekst, hvad den gørDen advarer dig om fejl og tilbyder almindelige eksempler og tips.
- Cron-jobgeneratorOnlineassistent til generering af cron-udtryk fra muligheder som tid, dag, interval osv. Giver dig mulighed for at oprette tilbagevendende job med foruddefinerede indstillinger og personliggøre dem.
- EasyCron: cloudtjeneste til planlæg HTTP-anmodninger til URL'er med bestemte intervaller. Bruges i vid udstrækning til at starte webscripts, API-opgaver osv. med et kontrolpanel, logfiler og e-mail-advarsler.
- KDE Cron (KCron)et grafisk værktøj integreret i KDE-miljøet til Opret, rediger og slet cron-job uden at røre kommandolinjenDet giver dig mulighed for at vælge tidspunkter og datoer fra en visuel brugerflade.
- Cron Makeronline cron-udtryksgenerator designet til Integrer med Quartz-biblioteket (udbredt i Java-miljøer), men også nyttig til at forstå komplekse kombinationer.
Disse værktøjer erstatter ikke Cron på dit system, men De forenkler kompositionsdelen af udtrykketreduktion af syntaksfejl.
Typer af Crontab: system og bruger
I Linux er der to hovedtyper af konfigurationsfiler til planlagte opgaver: system crontab og bruger crontabBegge bruger meget lignende syntaks, men de administreres ikke på samme måde.
El Cronab af systemet, normalt i / Etc / crontab og i filer fra /etc/cron.d, kræver normalt rodtilladelserDen bruges til kritiske systemopgaver (logrotation, databasevedligeholdelse, backupopgaver på højt niveau osv.) og inkorporerer, i modsætning til bruger-crontab'en, eksplicit brugerfeltet i hver linje for at angive Under hvilken identitet udføres kommandoen?.
masse Bruger crontab administreres med crontab -e og er opbevaret i /var/spool/cron/crontabs eller lignende placering. Kun brugeren kan indsende sine job. (eller root, som kan administrere andres cron-job), og de bør ikke redigeres direkte. For at begrænse, hvem der kan bruge cron, kan du ændre filerne /etc/cron.allow y /etc/cron.deny.
Indvirkning af Cron og Crontab på ydeevne
Selvom Cron i sig selv bruger meget få ressourcer, kan dårlig opgaveplanlægning negativ indvirkning på systemets ydeevneProblemet er normalt ikke cron-daemonen, men hvad vi kommanderer den til at udføre.
Når du planlægger at udløse mange opgaver på samme tid, kan det forårsage CPU- og RAM-forbrugstoppeFor eksempel er det næsten en garanti for, at serveren bliver langsommere, hvis man kører tre store sikkerhedskopier, reindekserer databasen og laver et loganalysescript på præcis samme tid.
Hvis opgaverne involverer netværk (fjernkopier, synkroniseringer med rclone(massedataoverførsler), kan du generere båndbreddeoverbelastning, øget latenstid og pingpåvirker andre tjenester, der er afhængige af forbindelsen.
Der er også risiko for opgavekonflikterTo scripts, der fungerer samtidigt på den samme fil eller database med forskellige operationer, kan forårsage datakorruption eller mærkelige fejl, der er vanskelige at diagnosticere.
For at begrænse effekten kan du bruge værktøjer som f.eks. rart at reducere CPU-prioriteten for et job, eller cpulimit at begrænse den maksimale procentdel af CPU, som en proces kan forbruge:
- Lav CPU-prioritet:
0 19 * * * usuario nice -n 19 /ruta/script.sh - Begræns CPU til 50%:
0 19 * * * usuario cpulimit -l 50 /ruta/script.sh
Brug af Crontab til rutineopgaver: sikkerhedskopiering, oprydning og overvågning
En af de store fordele ved Cron er, at det giver dig mulighed for at automatiser "vedligeholdelsen" af din maskine næsten ubesværet, hvilket forbedrer ydeevnen på mellemlang sigt og sparer tid.
En meget typisk anvendelse er Rengør periodisk midlertidige filer, cacher og tomme mapperMed et script, der sletter gamle eller tomme filer i bestemte stier, kan du frigøre plads og reducere fragmentering af filsystemet.
Et andet nyttigt mønster er planlæg system- og applikationsopdateringer uden for myldretiden. For eksempel et natjob, der starter apt opdatering og apt opgradering (eller tilsvarende i din distribution) gør det muligt for systemet at være opdateret uden at afbryde det daglige arbejde.
Du kan også automatisere lukning af applikationer, der har været inaktive i for lang tidfrigør hukommelse til andre processer. I desktop- eller applikationsservermiljøer kan dette gøre en betydelig forskel.
Og selvfølgelig er Cron perfekt til overvågnings- og logføringsscriptsRegistrer regelmæssigt CPU, RAM, diskforbrug, netværkslatenstid osv., gem det i logfiler, og analyser derefter tendenser for at opdage flaskehalse, før de bliver til alvorlige hændelser.
Ulemper og begrænsninger ved Cron og Crontab
Selvom Cron er et ekstremt kraftfuldt værktøj, er det ikke den perfekte løsning til alt. Det har Begrænsninger, der er værd at kende for ikke at presse den ud over, hvad den tilbyder.
På den ene side er indlæringskurveHvis du kommer fra mere grafiske miljøer eller systemer som Windows, kan det være skræmmende i starten at skrive cron-udtryk i hånden og arbejde uden en visuel brugerflade.
På den anden side er Cron tæt knyttet til Unix/Linux-økosystemet. Det, du lærer, vil være nyttigt på mange servere og lignende systemer, men Du vil ikke kunne bruge den, som den er, på Windows eller macOS (som har sine egne mekanismer).
Angående sikkerhed, hvis Cron-konfigurationsfilerne er ikke godt beskyttetDe kan være en indgangsportal for ondsindede henrettelser. At tillade enhver bruger at programmere ting uden kontrol åbner døren for problemer.
Desuden Cron Den er ikke ideel til meget komplekse opgaver eller opgaver med mange afhængigheder.Den håndterer ikke fejlflow på en avanceret måde, den kan ikke forsøge igen med betinget logik, og den integrerer ikke native med distribuerede systemer. Til det formål findes der mere sofistikerede schedulere eller systemd's egne timere.
Det skal du også huske på Crontab tilbyder kun et minuts nøjagtighedHvis du har brug for noget, der kører flere gange i sekundet eller med intervaller på mindre end et minut, skal du bruge andre værktøjer eller programløkker i selve scriptet.
Alternativer til Cron og Crontab: Anacron, Fcron, hcron, Mcron og andre
I nogle scenarier er Cron ikke det perfekte valg. Hvis du for eksempel har en bærbar computer eller server, der ikke altid er tændt, Job planlagt til et bestemt tidspunkt kan "gå tabt" hvis udstyret er slukket på det tidspunkt.
For at dække sådanne tilfælde findes der alternativer, som f.eks. Anakron, som er designet til at udføre periodiske opgaver uden at maskinen skal være tændt hele tidenHvis computeren var slukket, da en opgave skulle udføres, starter Anacron den hurtigst muligt efter opstart.
Fcron Det er en anden interessant mulighed. Det kræver ikke, at systemet er konstant aktivt; det kan fungere med specifikke datoer og tidspunkter, og tilbyder mere fleksibilitet på bekostning af manuel installation på mange distributioner.
hcron Det går et skridt videre og tillader brugen af Etiketter til organisering af job, administration af maskinnetværk og forbedring af sikkerhedenDet er ikke så populært, men det kan passe godt i miljøer, hvor centraliseret administration er ønsket.
McCon (baseret på Guile) adskiller sig ved, at det er afhængigt af et komplet programmeringssprog til at definere opgaveplanlægning, hvilket giver det en enorm magt når det kommer til at omdefinere job, oprette afhængigheder og håndtere kompleks logik.
I Windows bruges i stedet løsninger som Cron. WinCron, VisualCron eller Avanceret opgaveplanlæggersom tilbyder intuitive grafiske brugerflader og sammenlignelige funktionaliteter, dog integreret med Microsofts økosystem.
Cron og Crontab i forretningsmiljøer
I virksomheder af alle størrelser er Cron og Crontab en del af den "lim", der holder systemer kørende. De tillader automatiser gentagne og kritiske processer uden konstant menneskelig indgriben, hvilket reducerer risikoen for fejl og frigør administratorers tid.
Blandt de mest almindelige forretningsmæssige anvendelser er Planlagte sikkerhedskopier, softwareopdateringer, periodisk rapportgenerering, databasevedligeholdelsesopgaver og logoprydningTakket være syntaksens granularitet kan du finjustere, hvornår handlinger udføres, for at minimere effekten.
Derudover har disse automatiseringer en direkte effekt på effektivitet og produktivitetMedarbejdere behøver ikke at huske at starte rutineprocesser, menneskelige fejl reduceres, og vinduer med lav belastning udnyttes bedre til at udføre tunge operationer.
I forretningsmiljøer er det dog tilrådeligt Dokumentér alle planlagte job grundigt, opret sikkerhedskopier af crontabs, og gennemgå regelmæssigt, at det definerede stadig giver mening.Med tiden er det nemt at akkumulere forældede opgaver, der fortsætter med at forbruge ressourcer uden at bidrage med noget.
Til sidst bliver Cron og Crontab en slags "automatisk tidsplan" af systemetHvis de bruges klogt, bliver de uundværlige i både beskedne servere og store infrastrukturer med mange maskiner, og giver dig mulighed for at opretholde et solidt fundament at bygge andre mere avancerede orkestrerings- eller overvågningsværktøjer på.
I lyset af alt ovenstående er det klart, at Planlægning af opgaver i Linux med Crontab er fortsat en af de enkleste og mest effektive måder at automatisere dit system på.Med et par velskrevne linjer kan du håndtere sikkerhedskopier, oprydning, opdateringer, overvågning og forretningsprocesser uden at røre en knap, så længe du respekterer begrænsningerne, administrerer tilladelser, kontrollerer miljøet og fornuftigt planlægger effekten på ydeevne og sikkerhed.