- 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.
Automatisering af opgaver i Linux er en af de ting, hvor der ikke er nogen vej tilbage, når du først har integreret det i din rutine: engangsbackups, regelmæssige oprydninger, rapporter, e-mail-notifikationer eller planlægning af Telegram-beskeder ... det hele sker automatisk, uden at du behøver at bekymre dig om det. I denne artikel vil jeg forklare, i detaljer og uden at vrøvle, hvordan du mestrer cron og kører tilbagevendende eller engangsopgaver, præcis når du har brug for dem.
Udover at dække vigtige fremgangsmåder, integrerer vi tips , sikkerhed, komplet syntaks , timingkonventioner, køhåndtering, logføring, miljøkontrol og alternativer til, 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 råd om, hvordan du undgår at overbelaste dit system eller netværk med dårligt planlagte automatiseringer.
Hvad er cron og at, og hvornår skal man bruge hver af dem?
Kort sagt er cron den dæmon, der er ansvarlig for at kø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 alle Unix- eller GNU/Linux-systemer og er en hjørnesten i systemadministration.
Under motorhjelmen overvåger cron periodisk de regler, der er defineret i crontabs (cron-tabeller) og starter kommandoerne, når dato/klokkeslæt matcher; i mellemtiden delegerer at den faktiske udførelse til atd-tjenesten (eller atrun afhængigt af distributionen) og bevarer udførelsesmiljøet i det øjeblik, du planlægger opgaven, hvilket er fantastisk til variabelfølsomme scripts.

Periodisk planlægning med cron
I et typisk system er mange vedligeholdelsesopgaver allerede afhængige af cron : logrotation, opdatering af lokaliseringsindekset, sikkerhedskopier, oprydning af midlertidige filer og mere. I Debian og dets derivater finder du også standardmapper designet til at forenkle administratorens arbejde: /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ og /etc/cron.monthly/.
Som standard kan hver bruger have sin egen crontab . For 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. Rodbrugeren kan , udover sin egen crontab, planlægge opgaver i `/etc/crontab` eller efterlade kodestykker i `/etc/cron.d/`; disse system-crontaber inkluderer et ekstra felt til at angive, hvilken bruger der kører hver opgave.
Strukturen af en signifikant linje i en brugers crontab har 5 tidsfelter plus kommandoen . I /etc/crontab og /etc/cron.d/ vises et sjette felt med 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 skråstregintervaller (*/10 eller 0-50/10). Asterisken repræsenterer "alle værdier". For eksempel betyder */15 i minutfeltet "hvert 15. minut", og 0-10/2 svarer til 0, 2, 4, 6, 8, 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 også meget nyttige specialstrenge : @reboot, @hourly, @daily (@midnight svarer til), @weekly, @monthly, @yearly (eller @annually). Brug dem til at undgå lange udtryk, når de ikke tilføjer nogen værdi.
@reboot /usr/local/bin/lanzar_al_arranque.sh
@hourly /usr/local/bin/tarea_cada_hora.sh
Et klassisk tip, der aldrig slår fejl: cron arver ikke dit interaktive shell-miljø . Hvis dit script afhænger af variabler eller en udvidet PATH, skal du definere dem i begyndelsen af crontab-filen 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
[email protected]
HOME=/home/usuario
For at administrere din bruger-crontab, gør disse kommandoer dit liv lettere : `crontab -e` (rediger), `crontab -l` (liste), `crontab -r` (slet) og `crontab file` (gendan fra en fil). Hvis du administrerer en server med flere brugere, skal du tilføje `-u user` for at kunne operere på andre brugeres 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 kun behøver at noget sker én gang : at lukke computeren ned på et bestemt tidspunkt, udføre en engangsbackup, sende en påmindelse eller udløse en opdatering i løbet af et vedligeholdelsesvindue. I disse situationer er at/atd-kombinationen ideel.
Syntaksen for `at` er fleksibel med tid og dato: den accepterer europæiske og amerikanske formater , 24-timers eller 12-timers tid (kl. 4), scaffolding såsom `i dag` eller `i morgen`, og endda "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
Ved planlægning returnerer `at` jobnummeret og den forventede kørselsdato/-tidspunkt. Du bruger dette ID til at liste, inspicere eller annullere job. Køen forespørges med `atq`, og job slettes med `atrm`. For at 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 bevarer at variabler og mappen fra oprettelsestidspunktet og kører med /bin/sh. Køfiler gemmes typisk i /var/spool/cron/atjobs. Der er også en batch-mulighed, der planlægger job til når systembelastningen falder 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, mens du planlægger noget (det sker oftere, end du tror), er det så simpelt som at annullere ved at bruge `atrm ID` . Og hvis du ikke længere kan huske ID'et, viser `atq` det hurtigt sammen med brugernavn og planlagt dato.
Filer, tilladelser og adgangskontrol
For at kontrollere, hvem der kan programmere, skal du bruge cron og at allow filbaserede adgangslister i /etc: cron.allow, cron.deny, at.allow og at.deny. De fungerer med simpel logik: hvis .allow findes, kan kun anførte brugere bruge det; ellers er .deny markeret for at udelukke dem. Hvis ingen af delene 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 skal du undgå at redigere crontabs direkte under /var/spool . Brug altid `crontab -e`, `crontab -u` og `/etc/cron.d/` mapperne med separate filer for hver tjeneste. I Debian installerer en stor del af pakkevedligeholdelsen scripts i `/etc/cron.daily/` og relaterede mapper, hvilket reducerer friktion under opgraderinger og rydninger.
Med hensyn til logfiler sendes cron-aktivitet 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 det inden for crontab'en eller selve scriptet, og overvej at bruge 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 job kan lande på den rigtige placering, er det afgørende at have den korrekte systemtid og tidszone. Tjek dette 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 din computer ikke kører 24/7, kan cron gå glip af udførelsesvinduer (for eksempel kl. 3:00, når den er slukket). I disse tilfælde skal du installere anacron, som kører ventende daglige, ugentlige eller månedlige opgaver, når systemet genstarter.
Ydeevne og god praksis
Overplanlægning eller planlægning uden for spidsbelastningsperioder kan have sine konsekvenser: CPU- og RAM-stigninger, netværksoverbelastning ved overførsler, blokeringer fra to job, der kæmper om den samme fil ... Planlæg klogt, fordel arbejdsbyrden, og undgå at iværksætte mange tunge handlinger på én gang.
For at minimere påvirkningen, sænk prioriteterne med `nice` eller begræns CPU-forbruget med `cpulimit` i de mest ressourcekrævende cron-job. Du kan også implementere vedligeholdelsesvinduer og forhåndsindlæsningskontroller, før du starter en krævende 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 at rense cacher og midlertidige filer regelmæssigt , planlægge opdateringer uden for spidsbelastningsperioder og logge CPU-, hukommelses- og diskforbrugsmålinger med enkle scripts, der hjælper dig med at opdage flaskehalse, før de bliver et større problem.
Alternativer og tilføjelser: anacron, fcron, hcron, mcron
Hvis din maskine ikke altid er tændt, er anacron den perfekte ledsager til cron : den sikrer, at daglige, ugentlige og månedlige opgaver kører, når din computer genstarter. I Debian og dets derivater er integrationen med cron som standard veldesignet.
Der findes andre planlægningsprogrammer med interessante nuancer: fcron tillader planlægning uden behov for 24/7-teams og understøtter fine kombinationer af timer og minutter; hcron inkorporerer tags til at organisere job og letter administration af flere brugere; mcron foreslår sin egen tilgang med opgaverekonstruktion fra et udgangspunkt.
GUI-værktøjer og eksterne tjenester
Hvis du foretrækker en visuel eller online tilgang, har du muligheder for at oprette cron-job med et par klik : Crontab Guru (validerer og forklarer), Cron Job Generator (forudkonfigurerede skabeloner), EasyCron (planlægger kald til URL'er, logfiler og advarsler) og Cron Maker (baseret på Quartz). På KDE-skrivebordet lader KCron dig administrere opgaver uden at bruge kommandolinjen.
For dem, der har brug for at automatisere URL'er eller webhooks, forenkler tjenester som EasyCron orkestrering med et dashboard, logfiler, e-mail-advarsler og betinget udførelse. Husk på privatlivs- og compliance-hensyn, hvis du behandler følsomme data til eller fra tredjeparter.
macOS og Windows: Indbyggede alternativer
På macOS anbefales launchd frem for cron. Det definerer opgaver i .plist-filer med StartCalendarInterval og avancerede indstillinger såsom genforsøg, afhængigheder og genstart ved fejl. Systemintegrationen er bedre, og fejlhåndteringen er mere robust.
Hvis du leder efter noget lignende på Windows , har du planlæggere som WinCron, VisualCron eller Advanced Task Scheduler , der tilbyder en grafisk brugerflade, arbejdsgange og notifikationer. De er ikke cron-job, men de imødekommer det samme behov for periodisk automatisering i det pågældende miljø.
Vigtige forskelle mellem crontab og at
Selvom begge planlægger opgaver, er deres filosofi forskellig : crontab er til periodiske udførelser og vedligeholder ikke dit miljø; at er beregnet til en enkelt udførelse og bevarer variabler og den aktuelle mappe, der reproducerer betingelserne for den session, hvor du planlagde den.
På serviceniveau er cron den kontinuerlige dæmon , der kontrollerer regler hvert minut; atd (eller atrun) administrerer engangsudførelser og batchtilstand betinget af systembelastning.
Adgangs- og sikkerhedslister
For at begrænse brugen skal du konfigurere `/etc/cron.allow`, `/etc/cron.deny`, `/etc/at.allow` og `/etc/at.deny` . Indtast brugere, én pr. linje. I miljøer med flere brugere anbefales det at begrænse, hvem der kan programmere, revidere ændringer og beskytte `/etc` og `/var/spool` korrekt for at forhindre ondsindet manipulation.
Husk at cron kan sende joboutput til din lokale e-mail. Juster MAILTO-indstillingen 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, ville den typiske regel i din brugers crontab være:
0 3 * * * /ruta/al/script.sh
Hvis du vil have det i systemets crontab med en eksplicit bruger, skal du tilføje brugerfeltet :
0 3 * * * backup /usr/local/bin/backup.sh
For at planlægge en enkelt opgave i morgen kl. 11:00, brug "at" i et naturligt format :
at 11:00 tomorrow
echo 'Hola desde at' | mail [email protected]
<Ctrl+D>
Hvis du er interesseret i at køre en kommandofil på en bestemt dato, skal du indlæse `at` fra en fil :
at 17:25 28.02.2026 < /home/usuario/tareas
Og at inspicere eller fjerne, der er ingen mystik :
atq
at -c 9
atrm 9
For gentagne opgaver på daglig, ugentlig eller månedlig basis uden besvær, skal du placere eksekverbare scripts i mapperne /etc/cron.daily/, /etc/cron.weekly/ og /etc/cron.monthly/. Systemet vil derefter køre dem med passende intervaller.
Når systemet ikke altid er tændt, skal du installere anacron, så det udfører det, der stadig venter i /etc/cron.daily, /etc/cron.weekly og /etc/cron.monthly ved opstart. En livredder på bærbare computere.
Hvis du har brug for at skrive komplekse cron-udtryk, kan du bruge Crontab Guru eller Cron Job Generator . De validerer undervejs og hjælper dig med at undgå dumme fejl. EasyCron tilbyder et dashboard, logs og advarsler til planlægning af HTTP-kald.
Alt relateret til formatering og indstillinger er dokumenteret i crontab(5) . En hurtig gennemgang af `man crontab` vil afsløre nogle meget nyttige tricks, der ikke vises i de enkelte eksempler.
Automatisering med cron og at sparer dig tid, reducerer menneskelige fejl og giver dig mulighed for at køre processer uden for åbningstiden uden at forstyrre nogen. Med god planlægning, miljøkontrol, ordentlig logføring og omhyggelig overvågning af arbejdsbyrden er det nemt at vedligeholde rene og pålidelige systemer, selv med mange kørende opgaver.
Passioneret forfatter om bytes-verdenen og teknologien generelt. Jeg elsker at dele min viden gennem skrivning, og det er det, jeg vil gøre i denne blog, vise dig alle de mest interessante ting om gadgets, software, hardware, teknologiske trends og mere. Mit mål er at hjælpe dig med at navigere i den digitale verden på en enkel og underholdende måde.