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

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

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 tidsrejser frem i 2015. Alligevel har vi ikke flyvende biler, og der er ingen replikanter blandt os (så vidt jeg ved).





Det er let at føle sig skuffet over den nuværende teknologi, når vi sammenligner det med fiktive skildringer af fremtiden. Alligevel kan vores telefoner, computere og endda huse i disse dage gøre fantastiske ting. Evnen til at automatisere opgaver er en af ​​dem.





Hver Linux-bruger kan drage fordel af at planlægge opgaver, uanset om de er systemrelaterede (som at rydde op i gamle logfiler og opdatering af pakker ) eller betjener brugeren (tjekker e -mail, downloader podcasts ...). Windows -brugere har haft Task Scheduler siden Windows 95. Værktøjet, der udfører det samme job på Linux, kaldes cron, og her forklarer vi, hvordan du bruger det.





xbox man kan ikke oprette forbindelse til wifi

Hvad er Cron?

Cron er en systemtjeneste, der kører i baggrunden, tjekker efter planlagte opgaver og udfører dem, hvis den finder nogen. Opgaverne - også kaldet 'cron -job' - er defineret i særlige konfigurationsfiler (crontabs), som cron scanner hvert minut. Flere versioner af cron kan findes på tværs af forskellige Linux -distributioner. F.eks. Kaldes Fedoras gaffel af cron cronie , og det er der 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 dets derivater. Selvom de fleste instruktioner også gælder andre cron -implementeringer, kan der være mindre forskelle, så tjek deres manualer, hvis du beslutter dig for at skifte.



Hvad er en Crontab?

Hvis du er seriøs med at styre din tid, har du sandsynligvis en slags kalender - en app eller i det mindste et stykke papir. Crontab ligner meget din computers kalender. Den indeholder oplysningerne om planlagte opgaver og fortæller cron, hvilke kommandoer der skal køres på hvilket tidspunkt.

Faktisk er der flere crontabs på dit system. Hver bruger har sin egen crontab, inklusive root (administratoren). Bruger crontabs gemmes i





/var/spool/cron/crontabs/

. Det

crontab -l

kommandoen viser crontab -filen for den aktuelle bruger. Du kan kontrollere rodkrydset med





sudo crontab -l

.

Derudover er der system crontab -filen

/etc/crontab

som bruges til opgaver i hele systemet. Normalt har de form af eksekverbare, rod-ejede scripts placeret i

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, og

/etc/cron.monthly/

mapper, og på nogle distributioner,

/etc/cron.d/

mappe også. Generelt bør du ikke skulle håndtere disse opgaver, da de fleste af dem oprettes automatisk af installerede applikationer.

Sådan planlægger du opgaver med Cron

Det lyder enkelt: For at planlægge opgaver skal du bare tilføje dem til din crontab. Da crontab er en særlig konfigurationsfil, anbefales det ikke at redigere den manuelt. Brug i stedet

crontab -e

kommando. Hvis du vil redigere root eller andre brugeres crontabs, skal du køre kommandoen med administrative rettigheder og tilføje deres brugernavn efter indstillingen -u:

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

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

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

For at planlægge opgaver med succes skal du vide lidt om crontab -syntaksen:

  • Tallene skal være heltal (hele tal), og du kan bruge stjernen (*) i en hvilken som helst af kolonnerne som et jokertegn, hvilket betyder 'hvert minut/dag/måned ...'.
  • I kolonnen 'Månedens dag' skal du passe på ikke at angive en dato, der ikke forekommer i den måned, der er angivet i kolonnen 'Måned' (f.eks. 30. februar).
  • Både kolonnerne 'Måned' og 'Ugedag' accepterer korte navne i henholdsvis måneder og dage, og de er ufølsomme for store og små bogstaver.
  • I kolonnen 'Ugedag' står både 0 og 7 for søndag. Kolonnen 'Time' kræver formatet 'militær tid' (24-timers), men du kan ikke bruge tallet 24-i stedet står 0 for 12 am Dette skyldes, at værdierne for minut, time og ugedag starter på 0 i stedet for 1.
  • Sekunder understøttes ikke, så du kan ikke planlægge en opgave på et bestemt sekund.

Det du kan gøre er at planlægge inkluderende tidsintervaller ved hjælp af en bindestreg (14-22 under 'Timer' vil køre opgaven kontinuerligt fra kl. 14 til 22) eller køre en enkelt opgave flere gange ved at definere en kommasepareret liste (1, 3,5 under 'Ugedag' kører opgaven mandag, onsdag og fredag).

I mellemtiden er trinværdier repræsenteret ved en skråstreg (/), og disse angiver mængden af ​​spring inden for et område; for eksempel vil 3-20/3 under 'Timer' køre opgaven hver tredje time fra kl. Dette er nyttigt, når du vil gentage opgaver hver X 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 'ti, fre-søn' ikke tilladt.

Alternativt kan du i stedet for at angive en værdi for hver kolonne bare skrive @weekly, @yearly, @monthly, @daily eller @hourly i begyndelsen af ​​en række, efterfulgt af en kommando. Planlagt som dette, vil opgaverne køre i den første mulige instans, så @weekly ville køre ved midnat den første dag i ugen. Hvis du vil køre en opgave med det samme, når systemet (gen) starter, skal du bruge kommandoen @reboot.

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 for nye podcasts hver mandag kl. 10:20 og 20:20. En fødselsdagspåmindelse er sat til den 25. marts, og den kører hvert 30. minut inden for den angivne tidsramme. Endelig kontrollerer 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 (læg ikke mellemrum mellem kommaer, 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 kende nogen crontab -syntaks. De viser dig, hvornår jobbet skal køre næste gang, og giver skabeloner til almindeligt anvendte udtryk. Crontab.guru er den bedste i flokken, fordi den lader dig live-test crontab-syntaks, så du umiddelbart kan se, hvordan dine ændringer vil påvirke skemaet.

Sådan kontrolleres, om der udføres Cron -job

Cron formodes at køre stille i baggrunden og lade dig arbejde uforstyrret, mens den tager sig af dine opgaver. Men hvordan kan du sikre dig, at det rent faktisk virker?

Cron har en indbygget e-mail-meddelelsesfunktion, men dette kræver oprettelse af mindst en simpel lokal mailserver. Ikke mange hjemmebrugere er villige til at konfigurere dette, og ikke mange distributioner giver det som standard (f.eks. Gør Ubuntu ikke). Den hurtigste måde at tjekke op på cron er at scanne systemloggen med denne kommando:

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

Indstillingen -i gør vores forespørgsel ufølsomme for store og små bogstaver. Det er muligt, at cron vil have sin egen logfil et sted i

/var/log/

, så se der, hvis denne kommando ikke giver nyttige resultater.

Hvis du skal gemme output fra et bestemt cron -job, kan du omdirigere det til en fil. Angiv stien og navnet på filen i den sidste kolonne i din crontab efter den kommando, du vil køre:

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

Brug af et enkelt> symbol vil overskrive 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 virker?

Det kan ske, at du har tilføjet nogle opgaver, kontrolleret systemlogfiler og fundet ud af, at de ikke udføres som de burde. Her er nogle ting, du bør overveje - og være forsigtig med - når du prøver at løse problemet.

Kører cron -tjenesten?

Som du ved, skulle 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

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

hvordan formateres excel til udskrivning
initctl list

og se om cron er angivet.

Har du overhovedet lov til at have en crontab -fil?

Tjek din

/etc

mappe for filer navngivet

cron.allow

og

cron.deny

. På Ubuntu burde ingen af ​​dem eksistere, hvilket betyder, at alle brugere har lov til at administrere cron -job. Men hvis der er en

windows 10 hvordan man indtaster bios
cron.allow

fil, skal den indeholde dit brugernavn. Omvendt, hvis

cron.deny

fil findes, bør dit brugernavn ikke være i den. Forlader

cron.deny

fil tom betyder, at det kun er root og brugere, der er angivet 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 af valg er fisk eller bash, skal du ændre SHELL -variablen

. På samme måde indeholder PATH -variablen som standard kun få biblioteker. Det er her, crontab leder efter Linux -kommandoer. Hvis dit cron -job ikke kører, kan det skyldes, at crontab ikke 'ser' den kommando, du har brugt. For at undgå dette skal du tilføje mapper, der indeholder kommandoerne, til PATH -variablen adskilt af kolon:

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

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

Er din crontab -formatering korrekt?

Crontab -syntaks er ikke ligefrem gnidningsløs. Selvom du bekræfter det med onlineværktøjer, der er nævnt tidligere, kan en mindre fejl stadig forhindre cron i at udføre dine job. Vær forsigtig med at:

  • tilføj en tom linje i slutningen af ​​crontab -filen
  • undslippe % -tegnet med en omvendt skråstreg, hvis din kommando indeholder det
  • skrive kommentarer som separate linjer, der starter 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ængelig fra Systemindstillinger> Opgaveplanlægning modul. Med en ligetil grænseflade, der lader dig vælge og justere alt på bare et par museklik, er KCron en fornøjelse at bruge.

Hvis du foretrækker GNOME, så GNOME -skema er for dig. Fremgangsmåden er ens, selvom grænsefladen forventeligt er en smule anderledes. Det tilbyder en avanceret tilstand til finkornede ændringer og leveres med en panelapplet, hvorfra du kan styre opgaver direkte.

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

Er der nogen Cron -alternativer?

Selvom cron stort set er standardopgaveplanlæggeren til Linux, er den bestemt ikke den eneste. Det på kommando er perfekt til hurtige engangsopgaver, der kan planlægges direkte fra kommandolinjen uden særlige konfigurationsfiler. Hvis du har brug for mere, er der GNUbatch , som introducerer begrebet afhængighed. Med GNUbatch kan du angive specifikke betingelser for hvert job eller få en planlagt opgave til at afhænge af en tidligere opgave. Noget lignende kan opnås med systemtimere . Selvom det er mindre praktisk at konfigurere end cron, kan systemd -timere huske, om en opgave savnede sit skema, mens computeren var slukket, og køre den næste gang den er tændt.

Dette er noget, cron ikke kan gøre alene. Som sådan er den velegnet til servere og computere, der konstant kører, men den udfører ikke et job, der var planlagt, mens computeren var slukket. Det er her anacron kommer i spil. Det er teknisk set ikke et 'alternativ' eller en erstatning for cron. I stedet supplerer anacron cron og bør bruges sammen med det, hvilket er tilfældet på mange Linux-distributioner, herunder Ubuntu og Ubuntu-baserede produkter. Anacron logger, hvornår en opgave sidst blev udført, og kontrollerer, om der var ubesvarede forekomster, 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 måske se på Hcron eller SuperCron , som bringer mange forbedringer til grundlæggende cron -funktioner, men også er lidt udfordrende at administrere.

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: tidsplan af Gonzalo Aragon via Shutterstock

Del Del Tweet E -mail 12 videosider, der er bedre end YouTube

Her er nogle alternative videosider til YouTube. De indtager hver sin forskellige niche, men er værd at tilføje til dine bogmærker.

Læs Næste
Relaterede emner
  • Linux
  • Linux
Om forfatteren Ivana Isadora Devcic(24 artikler udgivet)

Ivana Isadora er freelance skribent og oversætter, Linux -elsker og KDE fangirl. Hun understøtter og promoverer gratis og open source -software, og hun leder altid efter friske, innovative apps. Find ud af, hvordan du kommer i kontakt her .

Mere fra Ivana Isadora Devcic

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere