Planlægning af opgaver i Linux med cron og at: en praktisk og komplet guide

Sidste ændring: 16/10/2025
Forfatter: Isaac
  • Cron til gentagelser og ved siden af ​​til enkelte udførelser, hver med sine egne dæmon- og miljømæssige særpræg.
  • Komplet crontab-syntaks: felter, lister, intervaller, hop og specielle strenge som @reboot eller @daily.
  • Sikkerhed og kontrol: tillad/afvis lister, logs, miljøvariabler, NTP og ressourcehåndtering med nice/cpulimit.
  • Alternativer og support: anacron, fcron, hcron, mcron, GUI/onlineværktøjer og launchd på macOS.

Planlægning af opgaver i Linux med cron og at

Automatiser opgaver i Linux Det er en af ​​de ting, hvor der ikke er nogen vej tilbage, når du først har indarbejdet det i din rutine: punktlige sikkerhedskopier, periodisk rengøring, rapporter, e-mail-notifikationer eller planlægge beskeder i Telegram...alt sker af sig selv, uden at du behøver at holde øje med det. I denne artikel vil jeg i detaljer og uden at vrøvle om busken forklare, hvordan du mestrer cron og hvordan du kører tilbagevendende eller engangsopgaver på præcis det tidspunkt, du har brug for det.

Udover at dække essentiel praksis, vi vil integrere Tricks, sikkerhed, fuld syntaks, tidskonventioner, køstyring, logfiler, miljøkontrol og alternativer, når din maskine ikke altid er tændt. Du vil også se værktøjer til at skrive cron-udtryk uden at kæmpe med syntaks og nogle tips til at undgå at overbelaste dit system og netværk med dårligt planlagte automatiseringer.

Hvad er cron og at, og hvornår skal man bruge hver af dem?

Med et par ord cron er den dæmon, der er ansvarlig for at udføre planlagte og tilbagevendende job (hver time, hver dag, hver uge osv.), mens at bruges til at planlægge en enkelt udførelse i fremtiden. Begge findes på næsten ethvert system. Unix eller GNU/Linux og er en søjle i systemadministration.

Underhood, cron overvåger periodisk de definerede regler i crontabs (cron-tabeller) og starter kommandoer når dato/tidspunkt matcher; på sin side delegerer at den faktiske udførelse til atd-tjenesten (eller atrun afhængigt af distributionen) og bevarer udførelsesmiljøet fra det øjeblik du planlægger opgaven, hvilket er fantastisk til variabelfølsomme scripts.

Opgaveautomatisering med cron og at

Periodisk planlægning med cron

I et typisk system, Mange vedligeholdelsesopgaver er allerede afhængige af cron: logrotation, opdatering af lokaliseringsindekset, sikkerhedskopier, rydning af midlertidige filer og mere. I Debian og derivater vil du også se standardmapper designet til at forenkle administratorens liv: /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ og /etc/cron.monthly/.

Standard, Hver bruger kan have sin egen crontabFor at redigere den skal du køre crontab -e. Indholdet gemmes i /var/spool/cron/crontabs/user, og du bør ikke redigere filen manuelt. Brugeren rodUdover crontab'en kan du planlægge opgaver i /etc/crontab eller efterlade "fragmenter" i /etc/cron.d/; disse system-crontaber tilføjer et ekstra felt for at angive, hvilken bruger hver opgave kører under.

Strukturen af ​​en betydelig linje i brugerens crontab Den har 5 tidsfelter plus kommandoenEt sjette felt vises i /etc/crontab og /etc/cron.d/, der viser brugeren. Felterne er, i rækkefølge: minut (0-59), time (0-23), månedsdag (1-31), måned (1-12) og ugedag (0-7, hvor 0 og 7 er søndag; engelske forkortelser kan også bruges: søn, man osv.).

# crontab de usuario (5 campos + comando)
# m h dom mon dow   comando
0 3 * * * /ruta/al/script.sh

# /etc/crontab o /etc/cron.d/ (6 campos: incluye usuario)
# m h dom mon dow   usuario   comando
0 3 * * * backup    /usr/local/bin/backup.sh

Syntaksen understøtter kommaseparerede lister (1,15,30) intervaller (1-5), og stigninger med skråstregen (*/10 eller 0-50/10). Stjernen repræsenterer "alle værdier". For eksempel betyder */15 i minutfeltet "hvert 15. minut", og 0-10/2 er lig med 0, 2, 4, 6, 8 eller 10.

# Ejemplos útiles
*/10 * * * * /usr/local/bin/tarea_cada_10_min
0 0 * * 0 /usr/local/bin/mantenimiento_semanal
30 2 1 * * /usr/local/bin/rotacion_mensual
0 6 * * Mon-Fri /usr/local/bin/reporte_laboral

Ud over ovenstående understøtter cron særlige kæder Meget praktisk: @reboot, @hourly, @daily (@midnight er tilsvarende), @weekly, @monthly, @yearly (eller @annually). Brug disse for at undgå lange udtryk, når de ikke tilføjer noget.

@reboot /usr/local/bin/lanzar_al_arranque.sh
@hourly /usr/local/bin/tarea_cada_hora.sh

En klassiker der aldrig slår fejl: cron arver ikke miljøet fra din interaktive shell. hvis du script Hvis det afhænger af variabler eller en udvidet PATH, skal du definere dem i begyndelsen af ​​crontab'en eller i selve scriptet. Du kan bruge MAILTO til at modtage output og fejl via lokal eller ekstern e-mail.

# Variables de entorno en crontab
env_reset
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=tu.correo@ejemplo.com
HOME=/home/usuario

For at administrere din bruger-crontab, Disse kommandoer gør dit liv lettere: crontab -e (rediger), crontab -l (liste), crontab -r (slet) og crontab fil (gendan fra fil). Hvis du kører en server med flere brugere, skal du tilføje -u bruger for at kunne køre på andre crontabs med root-rettigheder.

# Copia de seguridad y restauración del crontab de usuario
crontab -l > ~/crontab_backup.txt
crontab ~/crontab_backup.txt

Specifikke opgaver med kl.

Der er situationer, hvor du behøver kun at der sker noget én gang: sluk computeren på et bestemt tidspunkt, start en engangsbackup, send en påmindelse eller udløs en opdatering i løbet af et vedligeholdelsesvindue. at/atd-parringen er ideel til dette.

  Opsætning af et udviklingsmiljø med WSL på Windows

at-syntaksen er fleksibel med El tiempo og datoen: accepterer europæiske og amerikanske formater, timer i løbet af 24 timer eller 12 timer (kl. 4), stilladsering som i dag eller i morgen, og også "nu + forøgelse". Skriv kommandoer via standardinput og afslut med Ctrl+D (EOF).

# Ejecutar a las 14:00 de hoy (o mañana si ya pasó)
at 14:00
comando_1
comando_2
<Ctrl+D>

# Ejecutar a las 09:00 el 27 de julio de 2022 (varios formatos válidos)
at 09:00 27.07.22
at 09:00 2022-07-27
at 9am 07/27/2022

# Postergar X unidades desde ahora
at now + 30 minutes
at now + 2 hours
at now + 1 days
at now + 2 weeks

Når du programmerer, returnerer jobnummeret ved og den forventede udførelsesdato/-tidspunkt. Du bruger dette ID til at liste, inspicere eller annullere. Køen forespørges med atq, og job slettes med atrm. Hvis du vil se det registrerede indhold og miljø, skal du bruge at -c ID.

# Operaciones básicas con la cola de at
atq            # ver trabajos del usuario (root ve todos)
atrm 7         # borrar el trabajo 7
at -c 7        # mostrar script generado con entorno capturado

I modsætning til cron, ved bevarer variabler og mappe fra registreringsøjeblikket og kører med /bin/sh. Køfilerne gemmes normalt i /var/spool/cron/atjobs. Der er også en batch-mulighed, som gemmer job til når systembelastningen falder til under en tærskelværdi konfigureret i atd.

# Ejecutar cuando la carga lo permita (modo batch)
echo '/ruta/a/script_intensivo.sh' | batch

Hvis du laver en fejl, når du programmerer noget (det sker oftere, end du tror), annullering er så simpelt som et ATM-IDOg hvis du ikke kan huske ID'et, vil atq vise det på en lynhurtig liste med brugernavn og planlagt dato.

Filer, tilladelser og adgangskontrol

For at kontrollere, hvem der kan programmere, cron og på tilladelseslister baseret på filer i /etc: cron.allow, cron.deny, at.allow og at.deny. De fungerer med simpel logik: hvis .allow findes, kan kun de anførte brugere bruge det; hvis ikke, markeres .deny for at udelukke det. Hvis ingen findes, er standardadfærden normalt tilladt for alle lokale brugere.

# Ejemplo: permitir cron solo a dos usuarios
sudo sh -c 'printf "%s\n" admin ops > /etc/cron.allow'

Som administrator, undgå at redigere crontabs direkte under /var/spoolBrug altid crontab -e, crontab -u og /etc/cron.d/-mapperne med separate filer pr. tjeneste. I Debian installerer en stor del af pakkevedligeholdelsen scripts i /etc/cron.daily/ og lignende, hvilket reducerer friktion under opgraderinger og rydninger.

  Binære blobs i Linux: hvad de er, risici, politikker og alternativer

Angående logfiler, Cron-aktivitet går normalt til /var/log/syslog (eller /var/log/cron afhængigt af distributionen). Hvis du har brug for at konsolidere dit joboutput i en separat fil, omdiriger den i selve crontab'en eller i scriptet, og overvej observationsværktøjer, hvis du er seriøs omkring revision.

# Ejemplo de redirección a log dedicado
0 * * * * /usr/local/bin/tarea.sh >> /var/log/tarea.log 2>&1

Korrekt tid, tidszone og nøjagtighed

For at jobs skal falde, hvor de skal, Det er vigtigt at systemets tid er korrekt og tidszonen. Tjek det med timedatectl, synkroniser med NTP, og ret tidszonen om nødvendigt med timedatectl set-timezone Region/City.

# Comprobación y ajuste de zona horaria
timedatectl
timedatectl set-timezone Europe/Madrid

Hvis dit team ikke er tilgængeligt døgnet rundt, cron kan overse udførelsesvinduer (for eksempel kl. 3:00, når systemet er slukket). I disse tilfælde skal du installere Anacron, som kører de ventende daglige, ugentlige eller månedlige opgaver, når systemet genstarter.

Ydeevne og god praksis

Overplanlægning eller planlægning på modstridende tidspunkter kan have sine konsekvenser: CPU- og RAM-stigninger, netværksoverbelastning Hvis der er overførsler, blokeringer på grund af to job, der kæmper om den samme fil... Planlæg klogt, fordel belastningerne, og undgå at iværksætte for mange tunge handlinger på én gang.

For at minimere påvirkningen, Sænk prioriteterne med Nice eller begræns CPU'en med CPULimit I de mest "grådige" crons kan du også implementere vedligeholdelsesvinduer og forhåndsindlæsningskontroller, før du starter en dyr proces.

# Bajar prioridad o limitar CPU
0 19 * * * nice -n 19 /ruta/script.sh
0 19 * * * cpulimit -l 50 -- /ruta/script.sh

En anden god vane er ryd caches og midlertidige filer med jævne mellemrum, planlæg opdateringer uden for spidsbelastningsperioder og registrer CPU-, hukommelses- og diskforbrugsmålinger med enkle scripts, der hjælper dig med at opdage flaskehalse, før de udvikler sig til brand.

Alternativer og tilføjelser: anacron, fcron, hcron, mcron

Hvis din maskine ikke altid er tændt, Anacron er Crons ledsagerSikrer at daglige/ugentlige/månedlige opgaver udføres, når computeren tændes igen. I Debian og derivater er dens sameksistens med cron som standard velafklaret.

Der er andre planlæggere med interessante nuancer: Med fcron kan du planlægge uden behov for udstyr døgnet rundt og understøtter fine time- og minutkombinationer; hcron inkorporerer tags at organisere job og lette administration af flere brugere; mcron foreslår sin egen tilgang til opgaverekonstruktion fra et udgangspunkt.

GUI-værktøjer og eksterne tjenester

Hvis du foretrækker noget visuelt eller online, Du har muligheder for at oprette cron-udtryk med et enkelt klik.Crontab Guru (validerer og forklarer), Cron Job Generator (forudkonfigurerede skabeloner), EasyCron (planlægger URL-kald, logfiler og advarsler), Cron Maker (baseret på Quartz). På KDE-skrivebordet lader KCron dig administrere opgaver uden at røre kommandolinjen.

For dem, der har brug for at automatisere URL'er eller webhooks, Tjenester som EasyCron forenkler orkestrering med dashboard, logfiler, e-mail-advarsler og betinget udførelse. Husk privatlivs- og compliance-problemer, hvis du behandler følsomme data til eller fra tredjeparter.

macOS og Windows: Indbyggede alternativer

På macOS, launchd er det anbefalede system Sammenlignet med cron. Den definerer opgaver i .plist-filer med et StartCalendarInterval og avancerede indstillinger såsom genforsøg, afhængigheder og genstart ved fejl. Systemintegrationen er bedre, og fejlhåndteringen er mere robust.

  Løsning på Kernel-Power Error 41 i Windows 11

En Windows, hvis du leder efter noget lignende, Du har planlæggere som WinCron, VisualCron eller Advanced Task Scheduler, med en grafisk brugerflade, flows og notifikationer. De er ikke cron, men de løser det samme behov for periodisk automatisering i det miljø.

Vigtige forskelle mellem crontab og at

Selvom begge planlægger opgaver, deres filosofi er anderledescrontab bruges til periodiske udførelser og vedligeholder ikke dit miljø; at er designet til en enkelt udførelse og bevarer variabler og den aktuelle mappe, idet den reproducerer betingelser fra den session, hvor du planlagde den.

På serviceniveau, Cron er den kontinuerlige dæmon der tjekker reglerne hvert minut; atd (eller atrun) håndterer engangsudførelser og batchtilstand betinget af systembelastning.

Adgangs- og sikkerhedslister

For at begrænse brugen, konfigurer /etc/cron.allow, /etc/cron.deny, /etc/at.allow og /etc/at.denyIndtast brugere, én pr. linje. I miljøer med flere brugere er det en god idé at begrænse, hvem der kan programmere, revidere ændringer og korrekt beskytte /etc og /var/spool for at forhindre ondsindet manipulation.

Husk cron kan sende med lokal post Joboutput. Juster MAILTO eller omdiriger til logfiler. Hvis du outsourcer notifikationer eller indsamler metrikker fra tredjepartstjenester, skal du gennemgå implikationerne for privatlivets fred og overholdelse af lovgivningen.

Eksempler du rent faktisk vil bruge

For at køre et script dagligt kl. 03:00, den typiske regel i din brugers crontab ville det være:

0 3 * * * /ruta/al/script.sh

Hvis du vil have det i systemets crontab med eksplicit bruger, tilføj brugerfeltet:

0 3 * * * backup /usr/local/bin/backup.sh

For at planlægge en engangsopgave i morgen kl. 11:00, brug med et naturligt format:

at 11:00 tomorrow
echo 'Hola desde at' | mail usuario@ejemplo.com
<Ctrl+D>

Hvis du er interesseret i at køre en kommandofil på en bestemt dato, feeds fra en fil:

at 17:25 28.02.2026 < /home/usuario/tareas

Og for at inspicere eller fjerne, der er intet mysterium:

atq
at -c 9
atrm 9

Til gentagne opgaver pr. dag, uge ​​eller måned uden at komplicere dig selv, placere eksekverbare scripts i mapperne /etc/cron.daily/, /etc/cron.weekly/ og /etc/cron.monthly/. Systemet vil køre dem med passende intervaller.

Når systemet ikke altid er tændt, installer anacron så når den starter, udfører den det, der var tilbage i venteposition i /etc/cron.daily, /etc/cron.weekly og /etc/cron.monthly. En mirakelkur i bærbare.

Hvis du har brug for at skrive komplekse cron-udtryk, Brug Crontab Guru eller Cron Job GeneratorDe validerer undervejs og forhindrer tåbelige fejl. For at planlægge HTTP-kald giver EasyCron dig et dashboard, logs og advarsler.

Alt relateret til format og indstillinger er dokumenteret i crontab(5)Lidt tid med man crontab, og du får nogle meget saftige tricks, der ikke optræder i individuelle eksempler.

Automatisering med cron og at sparer dig tid, reducerer menneskelige fejl og giver dig mulighed for at køre processer uden for arbejdstiden uden at forstyrre nogen. Med god tidsplanlægning, miljøkontrol, ordentlige logfiler og et øje på belastningen er det nemt at vedligeholde rene og pålidelige systemer, selv med mange kørende opgaver.

Planlæg beskeder i Telegram-4
relateret artikel:
Sådan planlægger du beskeder på Telegram: en komplet guide med alle tricks