Slik planlegger du oppgaver i Linux med Cron og Crontab

Slik planlegger du oppgaver i Linux med Cron og Crontab

Visste du at Blade Runner er satt i 2019? Det er tre år fra nå! For ikke å nevne Tilbake til fremtiden 2 , hvor de tidsreiser frem til 2015. Likevel har vi ikke flygende biler, og det er ingen replikanter blant oss (så vidt jeg vet).





Det er lett å føle seg skuffet over dagens teknologi når vi sammenligner det med fiktive skildringer av fremtiden. Likevel kan telefonene, datamaskinene og til og med husene våre gjøre fantastiske ting i disse dager. Evnen til å automatisere oppgaver er en av dem.





Hver Linux-bruker kan dra fordel av planlegging av oppgaver, enten de er systemrelaterte (som å rydde opp i gamle logger og oppdaterer pakker ) eller betjener brukeren (sjekker e -post, laster ned podcaster ...). Windows -brukere har hatt Task Scheduler siden Windows 95. Verktøyet som gjør den samme jobben på Linux kalles cron, og her forklarer vi hvordan du bruker det.





hvordan koble en wii til en smart tv

Hva er Cron?

Cron er en systemtjeneste som kjører i bakgrunnen, ser etter planlagte oppgaver og utfører dem hvis den finner noen. Oppgavene - også kalt 'cron -jobber' - er definert i spesielle konfigurasjonsfiler (crontabs), som cron skanner hvert minutt. Flere versjoner av cron finnes på tvers av forskjellige Linux -distribusjoner. For eksempel kalles Fedoras gaffel av cron cronie , og det er det også fcron , bcron , og dcron . Noen har ekstra funksjoner, mens andre er mer fokusert på sikkerhet, men de er alle basert på den samme ideen.

Denne guiden er skrevet for vixie-cron, som er den mest utbredte versjonen av cron og den du finner på Ubuntu og dets derivater. Selv om de fleste instruksjonene også gjelder andre cron -implementeringer, kan det være mindre forskjeller, så sjekk manualene deres hvis du bestemmer deg for å bytte.



Hva er en Crontab?

Hvis du er seriøs med å administrere tiden din, har du sannsynligvis en slags kalender - en app eller i det minste et stykke papir. Crontab er veldig lik datamaskinens kalender. Den inneholder informasjonen om planlagte oppgaver, og forteller cron hvilke kommandoer som skal kjøres på hvilket tidspunkt.

Faktisk er flere crontabs på systemet ditt. Hver bruker har sin egen crontab, inkludert root (administratoren). Bruker -crontabs lagres i





/var/spool/cron/crontabs/

. De

crontab -l

kommandoen viser crontab -filen for den nåværende brukeren. Du kan sjekke rotkronen med





sudo crontab -l

.

I tillegg er det system -crontab -filen

/etc/crontab

som brukes til systemdekkende oppgaver. Vanligvis tar de form av kjørbare, roteide skript plassert i

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, og

/etc/cron.monthly/

mapper, og på noen distribusjoner,

/etc/cron.d/

mappe også. Generelt sett bør du ikke måtte håndtere disse oppgavene, ettersom de fleste av dem opprettes automatisk av installerte applikasjoner.

Slik planlegger du oppgaver med Cron

Det høres enkelt ut: for å planlegge oppgaver, legg dem til i crontab. Siden crontab er en spesiell konfigurasjonsfil, anbefales det ikke å redigere den manuelt. Bruk heller

crontab -e

kommando. For å redigere rot eller andre brukeres crontabs, kjør kommandoen med administrative rettigheter og legg til brukernavnet sitt etter alternativet -u:

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

Crontab -filen har to seksjoner. Den første inneholder miljøvariabler som settes opp automatisk. Du kan trygt endre PATH-, HOME- og SHELL -variablene, og endre MAIL -variabelen.

Den andre delen av filen er den faktiske 'tidsplanen' med de planlagte oppgavene. Hver oppgave har en linje (rad) i tabellen, med kolonner som representerer følgende verdier:

For å kunne planlegge oppgaver, må du vite litt om crontab -syntaksen:

  • Tallene skal være heltall (hele tall), og du kan bruke stjernen (*) i hvilken som helst av kolonnene som et jokertegn, som betyr 'hvert minutt/dag/måned ...'.
  • I kolonnen 'Månedens dag' må du passe på å ikke angi en dato som ikke forekommer i måneden som er angitt i 'Måned' -kolonnen (for eksempel 30. februar).
  • Både kolonnene 'Måned' og 'Ukedag' godtar korte navn i henholdsvis måneder og dager, og de er ufølsomme for store og små bokstaver.
  • I kolonnen 'Ukens dag' står både 0 og 7 for søndag. Kolonnen 'Time' krever 'militær tid' (24-timers) format, men du kan ikke bruke tallet 24-i stedet står 0 for 12 am Dette er fordi verdiene for minutt, time og ukedag starter på 0 i stedet for 1.
  • Sekunder støttes ikke, så du kan ikke planlegge en oppgave på et bestemt sekund.

Det du kan gjøre er å planlegge inkluderende tidsintervaller ved å bruke bindestrek (14-22 under 'Timer' vil kjøre oppgaven kontinuerlig fra 14.00 til 22.00), eller kjøre en enkelt oppgave flere ganger ved å definere en kommadelt liste (1, 3,5 under 'Ukens dag' vil kjøre oppgaven mandag, onsdag og fredag).

I mellomtiden er trinnverdier representert med en skråstrek (/), og disse angir mengden hopp over et område; for eksempel vil 3-20/3 under 'Timer' kjøre oppgaven hver tredje time fra kl. 15.00 til 20.00. Dette er nyttig når du vil gjenta oppgaver hver X. time, fordi du kan kombinere en stjerne og et trinn (*/X). Du kan kombinere områder med lister og trinn med områder så lenge du bruker tall. Med andre ord er kombinasjoner som 'jan-mar' eller 'ti, fre-søn' ikke tillatt.

Alternativt, i stedet for å angi en verdi for hver kolonne, kan du bare skrive @uke, @årlig, @måned, @daglig eller @time i begynnelsen av en rad, etterfulgt av en kommando. Planlagt slik, vil oppgavene kjøre i første mulige forekomst, så @weekly ville kjøre ved midnatt den første dagen i uken. Hvis du vil kjøre en oppgave umiddelbart når systemet (re) starter, bruker du @reboot -kommandoen.

I dette eksemplet har vi planlagt en sikkerhetskopi hver dag kl. 08:20 og 20:20. Bakgrunnen endres automatisk hver tredje dag kl. 19:00, og et skript vil se etter nye podcaster hver mandag kl. 10.20 og 20:20. En bursdagspåminnelse er satt til 25. mars, og den går hvert 30. minutt innenfor den angitte tidsrammen. Til slutt sjekker et skript e -post hvert 15. minutt fra 8 til 20, men bare på hverdager. Du står fritt til å organisere crontab med mellomrom og faner mellom kolonner, men ikke innenfor dem (ikke legg mellomrom mellom kommaer, bindestreker og skråstreker).

Hvis alt dette høres for komplisert ut, ikke bekymre deg - du kan alltid stole på internett. Verktøy som Crontab Generator , Crontab.guru , og Corntab hjelper deg med å lage cron -jobber uten å kjenne noen crontab -syntaks. De viser deg når jobben skal kjøres neste gang, og gir maler for vanlige uttrykk. Crontab.guru er den beste i gjengen fordi den lar deg live-teste crontab-syntaks, slik at du umiddelbart kan se hvordan endringene dine vil påvirke timeplanen.

Hvordan sjekke om Cron -jobber utføres

Cron skal løpe stille i bakgrunnen og la deg jobbe uforstyrret mens den tar seg av oppgavene dine. Men hvordan kan du sørge for at det faktisk fungerer?

Cron har en innebygd e-postvarslingsfunksjon, men dette krever at du konfigurerer minst en enkel lokal e-postserver. Ikke mange hjemmebrukere er villige til å konfigurere dette, og ikke mange distribusjoner gir det som standard (for eksempel gjør ikke Ubuntu). Den raskeste måten å sjekke cron på er å skanne systemloggen med denne kommandoen:

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

Alternativet -i gjør spørringen vår ufølsom. Det er mulig at cron vil ha sin egen loggfil et sted i

/var/log/

, så se der hvis denne kommandoen ikke gir nyttige resultater.

Hvis du trenger å lagre utdataene fra en bestemt cron -jobb, kan du omdirigere den til en fil. Oppgi banen og navnet på filen i den siste kolonnen i crontab, etter kommandoen du vil kjøre:

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

Ved bruk av et enkelt> symbol vil filen overskrives hver gang kommandoen kjøres. For å unngå dette, bruk >> i stedet - den legger utgangen til den eksisterende filen.

Hva om Cron ikke fungerer?

Det kan skje at du har lagt til noen oppgaver, sjekket systemloggene og funnet ut at de ikke utføres som de burde. Her er noen ting du bør vurdere - og vær forsiktig med - når du prøver å fikse problemet.

Kjører cron -tjenesten?

Som du vet, bør cron -demonen kjøre i bakgrunnen. Sørg for at dette virkelig er tilfelle. Tjenesten kalles enten crond eller bare cron.

For distribusjoner som bruker systemd:

systemctl status cron

For distribusjoner som bruker Upstart:

service cron status

Hvis distribusjonen din bruker den 'gamle' System V init -tilnærmingen, kan du liste opp alle tjenestene med:

morsomme spill å spille på tekst
initctl list

og se om cron er oppført.

Har du lov til å ha en crontab -fil?

Sjekk din

/etc

mappe for filer med navn

cron.allow

og

cron.deny

. På Ubuntu burde ingen av dem eksistere, noe som betyr at alle brukere har lov til å administrere cron -jobber. Imidlertid, hvis det er en

er 2 gb ram nok til telefonen
cron.allow

filen må den inneholde brukernavnet ditt. Omvendt, hvis

cron.deny

filen finnes, bør brukernavnet ditt ikke være i den. Å forlate

cron.deny

fil tom betyr at bare root og brukere som er oppført i

cron.allow

kan ha crontab -filer.

Er variablene dine riktig satt?

Crontab setter automatisk SHELL -variabelen til

/bin/sh

. Imidlertid, hvis ditt favoritt skall er fisk eller bash, bør du endre SHELL -variabelen

. På samme måte inneholder PATH -variabelen bare noen få kataloger som standard. Det er her crontab ser etter Linux -kommandoer. Hvis cron -jobben din ikke kjører, kan det være fordi crontab ikke 'ser' kommandoen du har brukt. For å unngå dette, legg til kataloger som inneholder kommandoene i PATH -variabelen, atskilt med kolon:

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

Hvis du ikke vil redigere dette i crontab, kan du definere disse variablene i skriptet du vil kjøre som en cron -jobb.

Er crontab -formateringen i orden?

Crontab -syntaks er ikke akkurat jevn seiling. Selv om du bekrefter det med elektroniske verktøy nevnt tidligere, kan en mindre feil fortsatt hindre cron i å utføre jobbene dine. Vær forsiktig med å:

  • legg til en tom linje på slutten av crontab -filen
  • unnslippe % -tegnet med en omvendt skråstrek hvis kommandoen din inneholder det
  • skrive kommentarer som separate linjer som begynner med #. Ikke skriv kommentarer på samme linje som miljøvariablene, eller ved siden av cron -jobbkommandoer.

Må du virkelig bruke terminalen?

Absolutt ikke. KDE -brukere kan planlegge cron -jobber med KCron, som er tilgjengelig fra Systeminnstillinger> Oppgaveplanlegger modul. Med et greit grensesnitt som lar deg velge og justere alt på bare noen få museklikk, er KCron en glede å bruke.

Hvis du foretrekker GNOME, da GNOME -timeplan er til deg. Tilnærmingen er lik, selv om grensesnittet forventet er litt annerledes. Den tilbyr en avansert modus for finkornete modifikasjoner, og kommer med en panelapplet som du kan administrere oppgaver direkte fra.

Du bør være oppmerksom på andre løsninger, for eksempel Crontab-UI og Minikron . De er mer egnet for brukere som administrerer flere maskiner og cron-jobber, og en av de kuleste funksjonene er det nettbaserte grensesnittet.

Er det noen Cron -alternativer?

Selv om cron stort sett er standard oppgaveplanlegger for Linux, er det absolutt ikke den eneste. De på kommando er perfekt for raske engangsjobber som kan planlegges direkte fra kommandolinjen, uten spesielle konfigurasjonsfiler. Hvis du trenger mer, er det det GNUbatch , som introduserer forestillingen om avhengighet. Med GNUbatch kan du angi spesifikke betingelser for hver jobb, eller gjøre en planlagt oppgave avhengig av en tidligere. Noe lignende kan oppnås med systemtimere . Selv om det er mindre praktisk å konfigurere enn cron, kan systemd -tidtakere huske om en oppgave savnet timeplanen mens datamaskinen var slått av, og kjøre den neste gang den er på.

Dette er noe cron ikke kan gjøre alene. Som sådan er den egnet for servere og datamaskiner som stadig kjører, men den vil ikke utføre en jobb som var planlagt mens datamaskinen var slått av. Dette er hvor anakron spiller inn. Det er teknisk sett ikke et 'alternativ' eller en erstatning for cron. I stedet utfyller anacron cron og bør brukes ved siden av det, noe som er tilfelle på mange Linux-distribusjoner, inkludert Ubuntu og Ubuntu-baserte produkter. Anacron logger når en oppgave sist ble utført, og sjekker om det var ubesvarte forekomster mens systemet ble slått av. Det vil kjøre dem når du slår på datamaskinen igjen, men hver oppgave kan utføres bare en gang om dagen.

Noen versjoner av cron, som fcron, tilbyr anacrons funksjoner som standard. Avanserte brukere vil kanskje se på Hcron eller SuperCron , som gir mange forbedringer til grunnleggende cron -funksjoner, men også er litt utfordrende å administrere.

Hva med deg? Hvordan organiserer du dine digitale oppgaver? Hvilke oppgaver planlegger du på Linux? Del historiene dine og tipsene for bruk av cron i kommentarene.

Bildekreditt: timeplan av Gonzalo Aragon via Shutterstock

Dele Dele kvitring E -post 12 videosider som er bedre enn YouTube

Her er noen alternative videosider til YouTube. De har hver sin nisje, men er verdt å legge til i bokmerkene dine.

Les neste
Relaterte temaer
  • Linux
  • Linux
Om forfatteren Ivana Isadora Devcic(24 artikler publisert)

Ivana Isadora er frilansskribent og oversetter, Linux -elsker og KDE fangirl. Hun støtter og markedsfører gratis og åpen kildekode -programvare, og hun ser alltid etter ferske, innovative apper. Finn ut hvordan du kommer i kontakt her .

Mer fra Ivana Isadora Devcic

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere