Forskjellene mellom Cron og Anacron i Linux forklart i detalj

Siste oppdatering: 17/12/2025
Forfatter: Isaac
  • Cron kjører oppgaver til nøyaktige tider og er ideell for servere som alltid er på, mens Anacron sikrer periodisk utførelse på datamaskiner som er avstengt.
  • Cron bruker system- og bruker-crontaber, samt cron.*- og cron.d-katalogene, mens Anacron er avhengig av /etc/anacrontab og tidsstempler i /var/spool/anacron.
  • Å kombinere Cron og Anacron dekker begge presise oppgaver i tiden slik som daglige, ukentlige eller månedlige jobber som ikke bør gås glipp av.
  • Verktøy som at- eller systemd-timere utfyller Cron og Anacron for å planlegge spesifikke utførelser eller mer avanserte konfigurasjoner.

cron og anacron i Linux

Hvis du jobber med GNU/Linux, vil du før eller siden støte på behovet for å automatisere gjentakende oppgaverSikkerhetskopier, oppdateringer, opprydding logger, filsynkroniseringosv. På det tidspunktet dukker nesten alltid de samme navnene opp: Kron og AnakronAlle nevner dem, men det er ikke alltid godt forklart hva hver enkelt gjør, hvordan de er forskjellige, og fremfor alt, når det er passende å bruke den ene, den andre eller begge samtidig.

I denne artikkelen skal vi rolig gå gjennom hvordan de fungerer, hvilke filer de påvirker, hvordan du konfigurerer dem og hva... praktiske forskjeller mellom Cron og Anacron i LinuxDu vil se konkrete eksempler, Triks vanlige oppgaver (som å starte grafiske skript, administrere brukertillatelser eller kombinere begge systemene) og også noen beste fremgangsmåter for å unngå å rote til ting når du planlegger kritiske oppgaver.

Hva er Cron og Anacron, og hvordan er de generelt forskjellige?

På en veldig kort måte, Cron er en daemon som utfører oppgaver til presise tider. (spesifikt minutt og tidspunkt), mens Anacron er en programmerer designet for utstyr som ikke alltid er slått på. og det sikrer at vanlige oppgaver ikke går tapt selv om systemet er slått av.

Cron antar at systemet er tilgjengelig 24/7, noe som er veldig typisk i servere, VPS-er eller produksjonsmaskinerHvis oppgaven var planlagt å kjøre klokken 03:00 og serveren er på, vil den kjøre. Hvis serveren var av eller i hvilemodus på det tidspunktet, vil oppgaven bli oversett, og Cron vil vente på neste planlagte tidspunkt uten å forsøke å kompensere.

Anacron, derimot, antar det motsatte: at laget kan å slå av eller suspendere ofte (bærbar(Stasjonære PC-er, hjemmeminiservere osv.). Derfor fungerer det ikke med nøyaktige timer, men med perioder uttrykt i dager. Hvis det var en "daglig" oppgave og datamaskinen har vært av i tre dager, vil Anacron sjekke hvilke oppgaver som ventet når den slås på igjen, og utføre dem når tiden er inne.

En viktig forskjell i filosofien er at Kron er synkron i betydningen nøyaktig tid (spesifikk time/minutt), mens Anacron fungerer asynkront med hensyn til systemklokkenDen bryr seg bare om hvor mye tid som har gått siden siste henrettelse, ikke det spesifikke tidspunktet.

Hvordan Cron fungerer: daemon, filer og oppgavestruktur

Cron er en systemdemon (en bakgrunnstjeneste) som alltid er aktiv mens maskinen er slått på. I Debian, Ubuntu og mange andre distribusjoner kjører den som tjenesten cron og hvert minutt inspiserer den en serie filer og mapper der de planlagte oppgavene er definert.

På Debian/Ubuntu-lignende systemer sjekker Cron rutinemessig disse steder:

  • / etc / crontab: systemhovedfil.
  • /etc/cron.d/tilleggsoppgavefiler, vanligvis opprettet av pakker eller av administratoren.
  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly: kataloger med skript som startes med jevne mellomrom.
  • /var/spool/cron/crontabs/: oppgavefiler for hver enkelt bruker.

I Debian og derivater, filen / etc / crontab Den inneholder spesielle oppføringer som kaller generiske skript for å kjøre innholdet i disse cron.*-katalogene. For eksempel kjører en typisk linje alt i /etc/cron.daily én gang om dagen til et bestemt tidspunkt, så lenge Anacron ikke tar seg av det (vi får se hva som skjer når Anacron kommer inn i bildet senere).

Strukturen til en cron-linje i systemfiler

I systemfiler som f.eks. / etc / crontab og filene under /etc/cron.d/Hver linje med en oppgave følger denne strukturen:

Min. time Dag_måned Måned Dag_uke Brukerkommando

Eksempellinje:

14 1 * * * pepe /home/pepe/bin/tarea.sh > /dev/null 2>&1

I dette tilfellet er oppgaven igangsatt hver dag klokken 01:14, den kjører som brukeren pepe og den angitte kommandoen er script /home/pepe/bin/tarea.shomdirigerer standard- og feilutdata til / Dev / null slik at det ikke plager deg.

Bruker-crontab: tilpasset planlegging for hver konto

Hver systembruker kan definere sine egne oppgaver ved hjelp av kommandoen crontabDette genererer og administrerer individuelle filer under /var/spool/cron/crontabs/ (på Debian), én per bruker. I disse filene Brukerkolonnen vises ikke, siden Cron vet at alt der må drives som den eieren.

  • crontab -e: rediger eller opprett den nåværende brukerens oppgaver.
  • crontab-l: viser oppgavene til den brukeren.
  • crontab -e -u navn: som root, rediger en annen brukers oppgaver.
  • crontab -l -u navn: viser en annen brukers oppgaver.

Format for hver linje i brukerens crontabs:

Min. time Dag_måned Måned Dag_uke Kommando

Noen typiske eksempler ved bruk av crontab -e ville:

# Kjør Nextcloud-sikkerhetskopi hver dag kl. 22:14 14 22 * ​​​​* * /home/pi/scripts/nextcloudbkp.sh # Kjør hver 3. time 0 0,3,6,9,12,15,18,21 * * * /home/pi/scripts/nextcloudbkp.sh # Forenklet hver 6. time 0 */6 * * * /home/pi/scripts/nextcloudbkp.sh # Mandag til fredag ​​kl. 13:30 30 13 * * 1-5 /home/pi/scripts/nextcloudbkp.sh # Bruk av snarveier @reboot, @daily, @weekly, @monthly, @yearly @reboot /home/pi/scripts/al_arrancar.sh @monthly /home/pi/scripts/backup_mensual.sh

Betydningen av feltene i Chron

I alle crontabs, enten det er system- eller brukerbaserte, de fem første feltene De har samme betydning. Det er viktig å forstå dem godt, slik at oppgaver utløses når du ønsker det.

  Hva bør du koble fra først: ladepluggen eller laptopkabelen?
Felt beskrivelse
Minutt (m) Verdi mellom 0 og 59. Symbolet * Det betyr «hvert minutt».
Tid (t) Område fra 0 til 23 i 24-timers format. * Det indikerer «alle timer».
Månedens dag (søn) Tall mellom 1 og 31, støtter områder som 10–20 og lister som 1, 15 og 30 i tillegg til *.
Måned (man) Verdier fra 1 til 12, også med områder/lister og jokertegnet *.
Ukedag (ned) Fra 0 til 7, hvor 0 og 7 vanligvis står for søndag; engelske forkortelser er også akseptable: man, tir, ons, tor, fre, lør, søn.

I tillegg til tall og stjerner kan du bruke uttrykk som */15 for å angi «hver 15. enhet» i det tilsvarende feltet (for eksempel hvert 15. minutt i det første) eller områder som 1-5 for «mandag til fredag» i feltet for ukedag.

/etc/cron.d-katalog: pakkede oppgaver og systemoppgaver

Katalog /etc/cron.d/ Den er utformet slik at systempakker eller administratoren kan definere periodiske oppgaver uten å berøre hovedfilen. / etc / crontabHver fil du legger der representerer én eller flere oppgaver som Cron sjekker hvert minutt.

Syntaksen for hver linje er den samme som i / etc / crontabDet vil si at det inkluderer feltet for usuarioHvis du for eksempel vil at et Firefox-oppdateringsskript skal kjøre hver dag klokken 22.00 som root, kan du opprette /etc/cron.d/firefox med dette innholdet:

0 22 * ​​​​* * root bash /home/joan/scripts/firefox_update.sh

Disse filene kan bare opprettes og redigeres av noen med administratorrettigheterDerfor er de en god måte å skille systemoppgaver fra hver brukers personlige innstillinger.

Katalog cron.daily, cron.weekly, cron.monthly, cron.hourly

Katalogene /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly y /etc/cron.hourly De er vant til å plassere kjørbare skript som vil bli utgitt med den frekvensen som navnet deres angir.

  • cron.hourlyDen kjører hver time, alltid administrert av Cron.
  • cron.dailyDen kjører én gang om dagen, enten via Cron eller Anacron, avhengig av konfigurasjonen.
  • cron.weeklyDen kjøres én gang i uken.
  • cron.månedligDen kjøres én gang i måneden.

Hvis Anacron ikke finnes, markeres det nøyaktige tidspunktet disse katalogene utløses / etc / crontabHvis Anacron er installert, vil den vanligvis håndtere det. cron.daily, cron.weekly og cron.monthlyMens cron.hourly avhenger vanligvis fortsatt av Cron (Dette kan endres, men det er den vanlige innstillingen).

Administrasjon av brukertillatelser: cron.allow og cron.deny

Som standard kan alle brukere i de fleste distribusjoner planlegge oppgaver med Cron. Men hvis du administrerer en delt server, kan det være lurt å... begrens hvem som kan bruke crontabDet er det filer er til for:

  • /etc/cron.allowhviteliste over autoriserte brukere.
  • /etc/cron.denysvarteliste over brukere som ikke har lov til å bruke Cron.

Logikken er enkel: hvis den eksisterer /etc/cron.allow og det er det ikke /etc/cron.denyBare oppførte brukere vil kunne bruke Cron. Hvis bare én finnes /etc/cron.denyAlle unntatt de spesifiserte vil ha tilgang. Og hvis ingen av de spesifiserte finnes, kan enhver systembruker definere sin crontab.

Praktiske hensyn ved bruk av Cron

Det er en rekke detaljer Ting å huske på for å sikre at Cron-oppgaver kjører knirkefritt:

  • Bruk alltid absolutte veier i kommandoer (for eksempel /usr/bin/rsync i stedet for bare rsync).
  • Hvis du trenger å kjøre komplekse kommandoer med pipes, omdirigeringer eller flere trinn, er det best å opprette en bash-skript og kall det skriptet fra Cron.
  • Karakteren % Den har en spesiell betydning (markerer slutten av linjen og begynnelsen av standardinndata), så hvis du bokstavelig talt trenger den, må du unnslippe den.
  • For å starte grafiske applikasjoner fra Cron, må du eksportere en DISPLAY gyldig, for eksempel:
    env DISPLAY=:0 /usr/bin/xdg-open /ruta/archivo

Og veldig viktig: hvis utstyret slås av til nøyaktig det planlagte tidspunktet, Oppgaven vil ikke bli gjenopprettet etterDen er tapt, og vi venter til neste intervall. Anacron ser ut til å fylle akkurat det hullet.

Hvordan Anacron fungerer: Filosofi, filer og oppgavebehandling

Anacron er et program utviklet for For å løse den største begrensningen med Cron på systemer som ikke er slått på hele tidentap av planlagte oppgaver når systemet slås av eller suspenderes i det avgjørende øyeblikket.

Det er ikke en demon som bor i minnet hele tiden. Anacron kjører på engangsbasis.vanligvis når systemet starter opp, når det går ut av hvilemodus, eller via en Cron-oppgave som kaller det med jevne mellomrom (for eksempel hver time mellom bestemte tidsluker).

Når den starter, leser Anacron konfigurasjonen, sjekker hvilke jobber den skulle ha kjørt de siste dagene, og verifiserer hvis den definerte perioden har gått siden sistHvis den oppdager at det er forsinkede oppgaver, planlegger den dem med en mulig forsinkelse og utfører dem til den tar igjen.

Anacron-nøkkelfiler

På et Debian/Ubuntu-system, hovedelementer Anacrons produkter er vanligvis:

  • /etc/anacrontab: sentral fil der Anacron-oppgaver deklareres.
  • /var/spool/anacron/: katalogen der tidsstempelfilene for hver oppgave er lagret.
  • /etc/cron.d/anacronI mange systemer er det en fil som får Cron til å kalle Anacron med jevne mellomrom (for eksempel én gang i timen mellom 7:30 og 23:30).
  • /etc/apm/event.d/anacron eller andre oppstartsskript: brukes i noen distroer for å kjøre Anacron når strømnettet oppdages eller når systemet starter.
  Konfigurer sikker oppstart med dine egne PK-, KEK- og db-nøkler

Videre, når Anacron tar kontroll over systemkatalogene, vil de daglige, ukentlige og månedlige oppgavene til /etc/cron.daily, /etc/cron.weekly y /etc/cron.monthly De kjører under dens paraply. Skriptene i disse katalogene forblir de samme, men Cron starter dem ikke lenger direktemen Anacron gjennom det som er definert i /etc/anacrontab.

Strukturen til /etc/anacrontab-filen

Hvis du åpner /etc/anacrontab Ved å bruke en teksteditor vil du se at noen miljøvariabler er deklarert i begynnelsen:

  • SHELL: kommandotolk brukt for oppgaver (vanligvis /bin/sh eller /bin/bash).
  • PATHstier der kjørbare filer skal søkes gjennom.
  • HJEMstandard arbeidskatalog.
  • LOGGNAVN: brukeren som oppgavene utføres under (vanligvis root).

Etter disse variablene kommer linjene som definerer hver oppgave. generell struktur er:

kommandoen for identifikator for forsinkelsesperiode

Hvor:

  • periodeantall dager mellom henrettelser eller snarveier som @daglig, @ukentlig, @månedlig.
  • forsinkelse: minutter som forventes fra Anacron bestemmer at jobben skal utføres til den faktisk starter den.
  • identifikatorunikt navn på oppgaven, brukes til å identifisere den i logger og til å navngi tidsstempelfilen.
  • comando: kommando eller skript som skal kjøres, med fullstendig bane.

Enkelt eksempel ukentlige lekser:

7 10   backup.ukentlig /bin/bash /home/joan/scripts/backup.sh

I dette tilfellet vil Anacron sørge for at hver 7 dager det skriptet kjører. Hvis datamaskinen har blitt slått av og det har gått mer enn sju dager siden siste utførelse, så snart den boot eller Anacron løper igjen, vil de vente 10 minutter (forsinkelse) og deretter vil kopien bli utgitt.

Tidsstempler i /var/spool/anacron

For å vite når hver oppgave sist ble utført, oppretter Anacron en fil for hver jobb i /var/spool/anacron/Navnet på hver fil samsvarer med identifikator definert i /etc/anacrontab (for eksempel backup.weekly, cron.daily, cron.weekly…).

Innholdet i disse filene er vanligvis bare et datoformat. ÅÅÅÅMMDDNår Anacron starter, sammenligner den tidsstempelet med gjeldende dato og perioden som er definert i anacrontab. Hvis det angitte antallet dager eller mer har gått, planlegger den utførelsen av den tilsvarende kommandoen.

Dette betyr det Bare datoen tas i betraktning, ikke det nøyaktige tidspunktet.Derfor brukes ikke Anacron til å kjøre ting på et bestemt tidspunkt, men for å sikre at «denne oppgaven kjøres minst én gang hver N dager».

Nyttige parametere og alternativer for Anacron

Kommandoen anakron Den aksepterer en rekke alternativer som er svært praktiske for testing eller for å kontrollere hvordan oppgaver utføres:

  • -ftvinger frem utførelse av alt arbeidet, selv om perioden ennå ikke er utløpt.
  • -u: oppdaterer tidsstemplene til alle jobber som om de hadde blitt utført, men uten å faktisk kjøre kommandoene.
  • -sutfører oppgaver sekvensielt, og venter på at én skal fullføres før den neste startes.
  • -n: utfører umiddelbart de relevante jobbene, og aktiverer implisitt -s.
  • -d: går ikke til bakgrunnen; viser meldinger via standardutgang (nyttig for feilsøking).
  • -q: undertrykker feilmeldinger på standardutgang, beregnet for bruk i forbindelse med -d.
  • -t-filBruk en alternativ oppgavefil i stedet for /etc/anacrontab.
  • -T: sjekker syntaksen til en oppgavefil og viser feil uten å utføre noe.
  • -S dirBruk en alternativ katalog for å lagre tidsstempler.

Hvis du når som helst vil tvinge frem umiddelbar henrettelse For oppgavene som er definert i anacrontab for å sjekke at alt fungerer som det skal, kan du bruke:

sudo anakron -f

Avanserte alternativer i /etc/anacrontab: tilfeldige tidsplaner og forsinkelser

I tillegg til oppgavelinjene, i /etc/anacrontab Noen tilleggsparametere kan defineres som påvirker den generelle oppførselen:

  • START_HOURS_RANGE=3–22: begrenser tidsrommet Anacron kan kjøre jobber i (i dette eksemplet bare mellom 03:00 og 22:00).
  • TILFELDIG_FORSINKELSE=10legger til en tilfeldig forsinkelse mellom 0 og 10 minutter til hver oppgave, noe som bidrar til å unngå belastningstopper å sette i gang alt på en gang helt i starten.

Ved å kombinere disse parameterne med periodene og forsinkelsene for hver oppgave kan du finjustere oppførselen og unngå overraskelser som at CPU eller disk jobber med full kapasitet midt i arbeidstiden.

Viktige forskjeller mellom Cron og Anacron

Etter å ha sett på begge separat, er det verdt å sammenligne deres viktigste egenskaper. Cron y Anakron å være tydelig på hva hver enkelt bidrar med.

Cron Anakron
A demon alltid aktiv i bakgrunnen. A program som går i tide når det kalles (systemoppstart, Cron, skript).
Det lar deg planlegge oppgaver nøyaktig minutt og time. Fungerer med menstruasjoner i dager (daglig, ukentlig, månedlig, hver N. dag), uten spesifikke tidspunkter.
Hvis datamaskinen er slått av når en oppgave er planlagt, at henrettelsen er tapt. Hvis enheten var slått av, da den ble slått på igjen fullfør de forsinkede oppgavene der det er passende.
Enhver bruker kan planlegge oppgaver (med unntak av begrensninger med cron.allow/cron.deny). Normalt sett er det bare administrator (root).
Det er ideelt for Døgnåpne servere eller systemer hvor klokken er pålitelig. Det er ideelt for bærbare datamaskiner, stasjonære datamaskiner og utstyr som ofte slår seg av.

I mange moderne distribusjoner, spesielt Debian og dets derivater, Kommer begge forhåndsinstallert, eller anbefales det å installere dem sammen?Cron håndterer tidssensitive oppgaver, brukerjobber og direktører som cron.hourly, mens Anacron tar ansvar for cron.daily, cron.weekly og cron.monthly for å sikre at systemvedlikeholdsoppgaver ikke går tapt selv om datamaskinen ikke alltid er slått på.

  Synkronisering med rsync på Linux: Komplett guide og praktiske tips

Når skal man bruke Cron, når skal man bruke Anacron, og når skal man kombinere dem

En veldig praktisk måte å bestemme seg på er å tenke på type maskin og hvilken type oppgave du ønsker å automatisere.

  • I en server som er i drift døgnet rundt (nett, database, e-post osv.), er det normalt å nesten utelukkende stole på CronDu kan installere Anacron hvis du vil, men på en server som aldri er slått av legger det ikke til mye.
  • I en stasjonær eller bærbar PC Siden den slår seg av og på hver dag, er det fornuftige å bruke den Kron + AnakronCron for svært spesifikke oppgaver (å kjøre noe hvert 15. minutt mens datamaskinen er på) og Anacron for "daglige", "ukentlige" eller "månedlige" vedlikeholdsoppgaver som du ikke vil gå glipp av hvis PC-en var av da den skulle.

Praktiske regler som vanligvis fungerer bra:

  • Hvis du trenger det eksakte henrettelser Bruk Cron på timen (for eksempel et skript som kjører daglig fakturering klokken 23:58).
  • Hvis det er nok for deg at noe skjer minst én gang hver X dager (for eksempel rotere logger, slette midlertidige filer, regenerere indekser), bruk Anacron eller få skriptene dine i cron.daily, cron.weekly og cron.monthly håndtert av den.
  • På Debian-servere er det vanlig at oppgaver installert av pakker ligger i /etc/cron.daily og lignende. Hvis Anacron er til stede, vil den sørge for at disse oppgavene utføres selv om serveren din opplever uventede driftsstans.

Praktisk eksempel med Anacron: daglige sikkerhetskopier selv om datamaskinen ikke alltid er på

Tenk deg at du vil ha en daglig kopi av en viktig filMen datamaskinen din slår seg av hver natt, og du vet ikke nøyaktig når du slår den på igjen. Anacron er perfekt for dette.

Anta at du har en fil /home/usuario/test.txt og du vil lagre daglige kopier med dato og klokkeslett i navnet. Du kan opprette et lite bash-skript, gi det utførelsestillatelser og deretter legge til en linje til /etc/anacrontab kjør den én gang om dagen med en liten forsinkelse etter at systemet starter.

flyt typisk arbeid:

  • Du lager manuset /home/usuario/prueba.sh som kopierer filen med et dato- og klokkeslettsuffiks.
  • Du gir den utførelsestillatelser med chmod 700 prøving.sh.
  • Du tester skriptet manuelt for å bekrefte at det gjør det det skal.
  • Editas /etc/anacrontab og du legger til en linje som denne:
    @daily 1 somebooks /bin/bash /home/usuario/prueba.sh
  • Du starter Anacron på nytt eller tvinger den til å sjekke at alt kjører som det skal.

Fra det øyeblikket, en gang om dagenEller, så snart datamaskinen slår seg på hvis den ikke kunne kjøre jobben dagen før, vil Anacron starte skriptet ditt, vente ett minutt (forsinkelse=1) og generere en ny versjonert kopi.

Andre relaterte verktøy: at- og systemd-timere

Selv om Cron og Anacron er stjernene innen gjentakende automatisering i Linux, finnes det andre verktøy det burde være på radaren din.

På den ene siden har du atdesignet for programmering oppgaver som kun utføres én gang på et bestemt tidspunkt. Det er ideelt når du vil si noe sånt som «kjør denne kommandoen i morgen klokken 10:15 og glem det».

  • Et grunnleggende eksempel på omstart på et bestemt tidspunkt:
    at 10:15
    > reboot
    > ^D
  • Eller noe mer omfattende, med driftsstans, venting og omstart på en bestemt dag:
    at 12.12.2106 21:23
    > /etc/init.d/apache stop
    > sleep 600
    > /etc/init.d/apache start
    > ^D

Verkene til at er lagret i /var/spool/cron/atjobs og du kan liste dem opp med og o på -l, i tillegg til å slette dem med minibank.

På den annen side, i moderne systemer med systemd Det finnes også systemd tidtakereDisse verktøyene lar deg erstatte (delvis eller helt) Cron og Anacron ved å definere .timer- og .service-enheter. De er et veldig kraftig alternativ, men noe mer komplisert å konfigurere. Hvis du allerede mestrer Cron/Anacron og ønsker enda bedre kontroll over avhengigheter og tjenestetilstander, er de verdt å utforske.

I praksis, for de fleste administratorer og avanserte brukere, kombinerer Cron, Anacron og på Den tilbyr et tilstrekkelig utvalg til å dekke nesten alle automatiseringsbehov uten å måtte komplisere livet ditt fra dag én med systemd-timere.

Med alt dette på bordet har du nå et ganske komplett bilde av hvordan Cron og Anacron deler automatiseringsarbeidet i LinuxCron er ansvarlig for å utløse prosesser med sveitsisk presisjon så lenge systemet er oppe og kjører, mens Anacron kjører i bakgrunnen og sjekker hva som er ugjort når maskinen er slått av, og sikrer at daglige, ukentlige eller månedlige vedlikeholdsoppgaver ikke går tapt selv om utstyret har lengre levetid enn en klassisk server.

Slik defragmenterer du disken i Windows 11-7
Relatert artikkel:
Typer sikkerhetskopier og forskjeller: en komplett guide for bedrifter