Sådan planlægger du opgaver i Linux med Cron og Crontab

Evnen til at automatisere opgaver er en af ​​de futuristiske teknologier, der allerede er her. Enhver Linux-bruger kan drage fordel af planlægningssystemet og brugeropgaver, takket være cron, en brugervenlig baggrundstjeneste.

Evnen til at automatisere opgaver er en af ​​de futuristiske teknologier, der allerede er her.  Enhver Linux-bruger kan drage fordel af planlægningssystemet og brugeropgaver, takket være cron, en brugervenlig baggrundstjeneste.
Reklame

Vidste du, at Blade Runner er sat i 2019? Det er tre år fra nu! For ikke at nævne Tilbage til fremtiden 2, hvor de kører frem til 2015. Men vi har ikke flyvende biler, og der er ingen replikanter blandt os (så vidt jeg ved).

linux-cron-job-tilbud

Det er let at føle sig skuffet over den nuværende teknologi, når vi sammenligner den med fremtidens fiktive forestillinger. Men i dag kan vores telefoner, computere og endda huse gøre fantastiske ting 5 DIY Home Automation Projekter at komme i gang med dit smarte hjem 5 DIY Home Automation Projekter at komme i gang med dit smarte hjem Når det kommer til at skabe smarte hjem, ved bare ikke hvor man skal starte. Her er fem grundlæggende begyndere smarte hjem projekter, du kan bygge lige nu. Læs mere . Evnen til at automatisere opgaver er en af ​​dem.

Enhver Linux-bruger kan drage fordel af planlægningsopgaver, uanset om de er systemrelaterede (f.eks. Rydning af gamle logfiler og opdatering af pakker. Sådan opdateres en eller alle programmer på Linux i sekunder. Sådan opdateres en eller alle programmer på Linux i sekunder. Linux-terminalen gør det nemt at opdatere en enkelt app på din computer eller anvende alle tilgængelige opdateringer på én gang. Sådan gør du Læs mere) eller serverer brugeren (tjek e-mail, download podcasts ...). Windows-brugere har haft Task Scheduler 4 Boring Tasks Du kan automatisere med Windows Task Scheduler 4 Boring Opgaver Du kan automatisere med Windows Task Scheduler Din tid er for værdifuld at blive spildt med gentagne opgaver. Lad os vise dig, hvordan man automatiserer og planlægger opgaver. Vi har også nogle få gode eksempler. Læs mere siden Windows 95. Værktøjet, der gør det samme job på Linux kaldes cron, og her forklarer vi hvordan du bruger det.

Hvad er Cron?

Cron er en systemtjeneste, der kører i baggrunden, kontrollerer planlagte opgaver og udfører dem, hvis det finder nogen. Opgaverne - også kaldet "cron jobs" 5 Begynder Linux Setup Idéer til Cron Jobs & Shell Scripts 5 Begynder Linux Setup Idéer til Cron Jobs & Shell Scripts Med bash scripting kan du gøre en kompleks række opgaver i en hurtig gå så det er fantastisk til uddybende og gentagne behov. Det er også en fantastisk måde at lære terminal at kende på. Læs mere "- er defineret i specielle konfigurationsfiler (crontabs), som cron scanner hvert minut. Flere versioner af cron kan findes på tværs af forskellige Linux-distributioner. Fedora's gaffel af cron hedder for eksempel cronie, og der er også fcron, bcron og dcron. Nogle har ekstra funktioner, mens andre er mere fokuseret på sikkerhed, men de er alle baseret på den samme idé.

Denne vejledning er skrevet til vixie-cron, som er den mest udbredte version af cron og den, du finder på Ubuntu og dens derivater. Mens de fleste instruktioner gælder for andre cron implementeringer også, kan der være mindre forskelle, så tjek deres manualer, hvis du beslutter at skifte.

Hvad er en Crontab?

Hvis du er seriøs om at administrere din tid, har du sandsynligvis en kalender af en eller anden art. Organiser din tid med disse 4 Linux Kalender Apps Organiser din tid med disse 4 Linux Kalender Apps Er det fornuftigt at bruge en stationær kalenderapp? Vi synes det, især for at muliggøre adgang til begivenheder på en synkroniseret enhed. Disse Linux kalender apps er særligt nyttige. Læs mere - en app eller i det mindste et stykke papir. Crontab er meget ligesom din computers kalender. Den indeholder oplysninger om planlagte opgaver og fortæller cron, hvilke kommandoer der skal køre på hvilket tidspunkt.

Faktisk er flere crontabs på dit system. Hver bruger har deres eget crontab, herunder root (administrator). Bruger crontabs gemmes i /var/spool/cron/crontabs/ . Kommandoen crontab -l vil liste crontab-filen til den aktuelle bruger. Du kan tjekke root crontab med sudo crontab -l .

Derudover er der system crontab-filen /etc/crontab som bruges til systemopgaver. Normalt har de form af eksekverbare, root-ejede scripts placeret i /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ og /etc/cron.monthly/ mapper og på nogle uddelinger, også /etc/cron.d/ mappen. Generelt skal du ikke håndtere disse opgaver, da de fleste af dem oprettes automatisk ved installerede applikationer.

Sådan planlægger du opgaver med Cron

Det lyder simpelt: at planlægge opgaver, bare tilføj dem til din crontab. Da crontab er en speciel konfigurationsfil, anbefales det ikke at redigere det manuelt. Brug i stedet kommandoen crontab -e . Hvis du vil redigere root eller andre brugers crontabs, skal du køre kommandoen med administrative rettigheder og tilføje deres brugernavn efter -u indstillingen:

sudo crontab -u root -e
sudo crontab -u username -e

linux-cron-job-crontab-editor

Crontab-filen har to sektioner. Den første indeholder miljøvariabler, der automatisk oprettes. Du kan sikkert ændre variablerne PATH, HOME og SHELL, og ændre MAIL-variablen.

Den anden del af filen er den faktiske "tidsplan" med dine planlagte opgaver. Hver opgave indtager en linje (række) i tabellen med kolonner, der repræsenterer følgende værdier:

linux-cron-job-crontab

For at kunne planlægge opgaver skal du vide lidt om crontabsyntaxen:

  • Tallene skal være heltal (hele tal), og du kan bruge asterisken (*) i en af ​​kolonnerne som et jokertegn, hvilket betyder "hvert minut / dag / måned ...".
  • I kolonnen "Dag for måned" skal du være forsigtig med ikke at angive en dato, der ikke forekommer i den måned, der er angivet i kolonnen "Måned" (for eksempel den 30. februar).
  • Både "Måned" og "Ugedag" -kolonner accepterer korte navne i henholdsvis måneder og dage, og de er uhensigtsmæssige.
  • I kolonnen "Dag i ugen" står både 0 og 7 til søndag. Kolonnen "Time" kræver et "militærtid" (24-timers) format, men du kan ikke bruge nummeret 24 - i stedet står 0 for 12. Dette skyldes, at værdierne for minut, time og ugedag starter ved 0 i stedet for 1.
  • Sekunder understøttes ikke, så du kan ikke planlægge en opgave på et bestemt sekund.

Hvad du kan gøre er at planlægge inklusiv tidsinterval ved hjælp af en bindestreg (14-22 under "Timer" løber opgaven kontinuerligt fra kl. 22.00 til 22.00) eller køre en enkelt opgave flere gange ved at definere en kommasepareret liste (1, 3, 5 under "Ugedag" løber opgaven mandag, onsdag og fredag).

I mellemtiden er trinværdier repræsenteret af et fremad skråstreg (/), og disse angiver mængden af ​​hopper inden for et interval; for eksempel 3-20 / 3 under "Timer" løber opgaven hver 3. time fra kl. 03.00 til 20.00. Dette er nyttigt, når du vil gentage opgaver hver 15. time, fordi du kan kombinere en stjerne og et trin (* / X). Du kan kombinere intervaller med lister og trin med intervaller, så længe du bruger tal. Med andre ord er kombinationer som "jan-mar" eller "tis, fre-søn" ikke tilladt.

Alternativt kan du i stedet for at angive en værdi for hver søjle kun skrive @ weekly @ år, @monthly, @daily eller @hourly i starten af ​​en række efterfulgt af en kommando. Planlagt som dette vil opgaverne løbe i første mulige tilfælde, så @ weekly vil køre ved midnat den første dag i ugen. Hvis du vil køre en opgave straks, når systemet (gen) starter, skal du bruge kommandoen @reboot.

linux-cron-job-crontab-eksempel

I dette eksempel har vi planlagt en backup hver dag kl 08:20 og 20:20. Tapetet ændres automatisk hver tredje dag kl. 19.00, og et script vil tjekke efter nye podcasts. De 10 bedste apps til håndtering af podcasts på Linux De 10 bedste apps til håndtering af podcasts på Linux Linux har ikke et godt valg af podcast-klienter, men rolig - næsten alle moderne musikafspillere til Linux kan tjene som podcatcher. Lad os se på mulighederne. Læs mere hver mandag kl. 10:20 og 20:20. En fødselsdag påmindelse er indstillet til 25. marts, og den løber hvert 30. minut inden for den angivne tidsramme. Endelig tjekker et script e-mail hvert 15. minut fra 8 til 20, men kun på hverdage. Du er fri til at organisere din crontab med mellemrum og faner mellem kolonner, men ikke inden for dem (ikke sæt mellemrum mellem komma, bindestreger og skråstreger).

Hvis alt dette lyder for kompliceret, skal du ikke bekymre dig - du kan altid stole på internettet. Værktøjer som Crontab Generator, Crontab.guru og Corntab hjælper dig med at oprette cron-job uden at vide nogen crontab-syntaks. De viser dig, hvornår jobbet kører næste, og giver skabeloner til almindeligt anvendte udtryk. Crontab.guru er den bedste af bunken, fordi den lader dig leve test crontab syntaks, så du kan straks se, hvordan dine ændringer vil påvirke tidsplanen.

linux-cron-job-crontab-guru

Sådan kontrolleres hvis Cron Jobs udføres

Cron skal løbe stille i baggrunden og lade dig arbejde uforstyrret, mens det tager sig af dine opgaver. Men hvordan kan du sørge for at det rent faktisk fungerer?

Cron har en indbygget e-mail-beskedfunktion, men det kræver at konfigurere mindst en simpel lokal mail-server. Hvordan fungerer en e-mail-server? [Teknologi forklaret] Hvordan fungerer en e-mail-server? [Teknologi forklaret] Bag hver e-mail er en kraftig motor kaldet e-mail-serveren, som skubber e-mails gennem internettet. Læs mere . Ikke mange hjemmebrugere er villige til at konfigurere dette, og ikke mange distributioner leverer det som standard (f.eks. Ubuntu gør det ikke). Den hurtigste måde at tjekke på cron er at scanne systemloggen med denne kommando:

cat /var/log/syslog | grep -i cron

linux-cron-job-log

Indstillingen -i gør vores forespørgsel tilfældig. Det er muligt, at cron vil have sin egen logfil et eller andet sted i /var/log/, så se der, hvis denne kommando ikke giver nyttige resultater.

Hvis du skal gemme output fra et bestemt cronjob, kan du omdirigere det til en fil. Angiv stien og navnet på filen i den sidste kolonne af dit crontab, efter kommandoen du vil køre:

30 * * * * /usr/bin/yourcommand>/home/username/logfile.txt

Ved at bruge et enkelt> symbol overskrives filen hver gang kommandoen kører. For at undgå dette skal du bruge >> i stedet - det tilføjer output til den eksisterende fil.

Hvad hvis Cron ikke arbejder?

Det kan ske, at du har tilføjet nogle opgaver, tjekket systemlogfilerne og fundet, at de ikke udføres som de skal. Her er nogle ting du bør overveje - og pas på - når du forsøger at løse problemet.

Kører cron-tjenesten?

Som du ved, skal cron-dæmonen køre i baggrunden. Sørg for, at dette virkelig er tilfældet. Tjenesten kaldes enten crond eller bare cron.

For distributioner ved hjælp af systemd:

systemctl status cron

For distributioner ved hjælp af Upstart:

service cron status

linux-cron-job-tjeneste-status

Hvis din distribution bruger den "gamle" System V init tilgang, skal du liste alle tjenester med:

initctl list

og se om cron er angivet.

Har du endda lov til at få en crontab-fil?

Tjek din /etc mappe for filer med navnet cron.allow og cron.deny . På Ubuntu bør der ikke eksistere, hvilket betyder, at alle brugere har lov til at styre cron-job. Men hvis der er en cron.allow fil, skal den indeholde dit brugernavn. Omvendt, hvis filen cron.deny eksisterer, skal dit brugernavn ikke være i det. Hvis du cron.deny filen cron.deny, betyder det, at kun root og brugere opført i cron.allow kan have crontab-filer.

Er dine variabler indstillet korrekt?

Crontab indstiller automatisk din SHELL-variabel til /bin/sh . Men hvis din skal er valgfri, skal du 7 Grunde til, at du skal installere fiskeskallen. 7 Grunde til, at du skal installere fiskeskallen Kan du ikke lide, hvordan din Linux-terminal fungerer? Hvorfor ikke installere en ny skal? En sådan shell er fisk, som introducerer funktioner, der burde have været almindelige, men ikke. Lad os se. Læs mere eller bash, du skal ændre SHELL-variablen . På samme måde indeholder PATH-variablen som standard kun nogle få mapper. Det er her, hvor crontab leder efter Linux-kommandoer. Hvis dit cron-job ikke løber, kan det skyldes, at crontab ikke "se" den kommando, du har brugt. For at undgå dette skal du tilføje mapper, der indeholder kommandoerne til PATH-variablen, adskilt af kolonner:

PATH=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Hvis du ikke vil redigere dette i dit crontab, kan du definere disse variabler i det script, du vil køre som et cron-job.

Er din crontab formatering på punkt?

Crontab syntax er ikke ligefrem glat sejlads. Selvom du bekræfter det med onlineværktøjer nævnt tidligere, kan en mindre fejl stadig forhindre cron i at udføre dine job. Pas på at:

  • Tilføj en tom linje i slutningen af ​​crontab-filen
  • undslippe% tegn med en tilbageslag, hvis din kommando indeholder den
  • skriv kommentarer som separate linjer startende med #. Skriv ikke kommentarer på samme linje som miljøvariablerne eller ved siden af ​​cron-jobkommandoer.

Skal du virkelig bruge terminalen?

Absolut ikke. KDE-brugere kan planlægge cron-job med KCron, som er tilgængeligt fra Systemindstillinger> Opgaveplanlægningsmodul . Med en let grænseflade, som giver dig mulighed for at vælge og finjustere alt på blot et par klik med musen, er KCron en fornøjelse at bruge.

linux-cron-job-kcron

Hvis du foretrækker GNOME, er GNOME Schedule for dig. Tilgangen er ens, selv om grænsefladen er forventet lidt forskellig. Det tilbyder en avanceret tilstand til finkornede modifikationer, og leveres med en panelapplet, hvorfra du direkte kan styre opgaver.

linux-cron-job-gnome-tidsplan

Du bør være opmærksom på andre løsninger, som Crontab-UI og Minicron. De er mere egnede til brugere, der administrerer flere maskiner og cron-job, og en af ​​deres fedeste funktioner er den web-baserede grænseflade.

linux-cron-job-crontabui

Er der nogen Cron alternativer?

Mens cron er temmelig meget standardopgaveplanlæggeren til Linux Schedule & Automatiser Tasks i Linux med Gnome Schedule Schedule og automatiser opgaver i Linux med Gnome Schedule Læs mere, det er bestemt ikke den eneste. Kommandoen på kommandoen er perfekt til hurtige, engangsjobber, der kan planlægges lige fra kommandolinjen uden særlige konfigurationsfiler. Hvis du har brug for mere, er der GNUbatch, der introducerer begrebet afhængighed. Med GNUbatch kan du angive specifikke betingelser for hvert job, eller gøre en planlagt opgave afhængig af en tidligere. Noget lignende kan opnås med systemd timere. Selvom det er mindre praktisk at konfigurere end cron, kan systemd timere huske, om en opgave savnede sin tidsplan, mens computeren var slukket, og køre den næste gang den er tændt.

Dette er noget, som cron ikke kan gøre alene. Som sådan er den egnet til servere og computere, der løbende kører, men det vil ikke udføre et job, der var planlagt, mens computeren var slukket. Det er her, hvor anacron kommer i spil. Det er teknisk ikke et "alternativ" eller en erstatning for cron. I stedet kompletterer anacron cron og skal bruges sammen med det, hvilket er tilfældet for mange Linux-distributioner, herunder Ubuntu og Ubuntu-baserede produkter. Anacron logs, når en opgave blev udført, og kontrollerer, om der var nogen fejl, mens systemet blev slukket. Det kører dem, når du tænder computeren igen, men hver opgave kan udføres kun en gang om dagen.

Nogle versioner af cron, som fcron, tilbyder som standard anacrons funktioner. Avancerede brugere vil muligvis gerne se på Hcron eller SuperCron, hvilket giver mange forbedringer til grundlæggende cron-funktioner, men er også noget udfordrende at styre.

Hvad med dig? Hvordan organiserer du dine digitale opgaver? Hvilke opgaver planlægger du på Linux? Del dine historier og tips til brug af cron i kommentarerne.

Billedkredit: Planlægning af Gonzalo Aragon via Shutterstock

In this article