Slik planlegger du oppgaver i Linux med Cron og Crontab

Evnen til å automatisere oppgaver er en av de futuristiske teknologiene som allerede er her. Hver Linux-bruker kan dra nytte av planleggingssystemet og brukeroppgaver, takket være cron, en brukervennlig bakgrunnstjeneste.

Evnen til å automatisere oppgaver er en av de futuristiske teknologiene som allerede er her.  Hver Linux-bruker kan dra nytte av planleggingssystemet og brukeroppgaver, takket være cron, en brukervennlig bakgrunnstjeneste.
Annonse

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

linux-cron-jobber-sitat

Det er lett å føle seg skuffet over dagens teknologi når vi sammenligner den med fiktive fremtidsbilder av fremtiden. Men i dag, våre telefoner, datamaskiner og til og med hus kan gjøre fantastiske ting 5 DIY Hjemmeautomatiseringsprosjekter for å komme i gang med ditt smarte hjem 5 DIY Hjemmeautomatiseringsprosjekter for å komme i gang med ditt smarte hjem Når det gjelder å skape smarte hjem, vet bare ikke hvor du skal begynne. Her er fem grunnleggende nybegynnere smarte hjemme prosjekter du kan bygge akkurat nå. Les mer . Evnen til å automatisere oppgaver er en av dem.

Hver Linux-bruker kan dra nytte av planleggingsoppgaver, enten de er systemrelaterte (som å rydde opp gamle logger og oppdatere pakker. Slik oppdaterer du en eller alle programmer på Linux på sekunder. Slik oppdaterer du en eller alle programmer på Linux på sekunder. Linux-terminalen gjør det enkelt å oppdatere en enkelt app på datamaskinen din, eller bruke alle tilgjengelige oppdateringer samtidig. Dette er hvordan. Les mer) eller betjener brukeren (sjekker e-post, laster ned podcaster ...). Windows-brukere har hatt Task Scheduler 4 Boring-oppgaver du kan automatisere med Windows Oppgaveplanlegger 4 Boring Oppgaver Du kan automatisere med Windows Oppgaveplanlegger Tiden din er for verdifull til å bli bortkastet med repeterende oppgaver. La oss vise deg hvordan du automatiserer og planlegger oppgaver. Vi har også noen få gode eksempler. Les mer siden Windows 95. Verktøyet som gjør den samme jobben på Linux kalles cron, og her vil vi forklare hvordan du bruker den.

Hva er Cron?

Cron er en systemtjeneste som kjører i bakgrunnen, sjekker for planlagte oppgaver og utfører dem hvis den finner noen. Oppgavene - også kalt "cron-jobber" 5 Begynner Linux-oppsett Ideer for Cron Jobs & Shell Scripts 5 Nybegynner Linux-oppsett Ideer for Cron Jobs & Shell-skript Med bash scripting kan du gjøre en kompleks serie oppgaver på en rask måte, så det er flott for forseggjort og repeterende behov. Det er også en fin måte å bli kjent med terminal. Les mer "- er definert i spesielle konfigurasjonsfiler (crontabs), som cron skanner hvert minutt. Flere versjoner av cron finnes på tvers av forskjellige Linux-distribusjoner. Fedora's gaffel av cron kalles for eksempel cronie, og det er 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 veiledningen er skrevet for vixie-cron, som er den mest utbredte versjonen av cron og den du finner på Ubuntu og dets derivater. Mens de fleste instruksjoner gjelder for andre cron implementeringer også, kan det være små forskjeller, så sjekk deres håndbøker hvis du bestemmer deg for å bytte.

Hva er en Crontab?

Hvis du er seriøs om å administrere tiden, har du sannsynligvis en kalender av noe slag. Organiser din tid med disse 4 Linux-kalenderappene. Organiser din tid med disse 4 Linux-kalenderappene. Er det fornuftig å bruke en stasjonær kalenderapp? Vi tror det, spesielt for å aktivere tilgang til hendelser på en synkronisert enhet. Disse Linux-kalenderappene er spesielt nyttige. Les mer - en app eller minst et stykke papir. Crontab er veldig mye som datamaskinens kalender. Den inneholder informasjon om planlagte oppgaver, og forteller cron som kommandoer kjører på hvilket tidspunkt.

Faktisk er flere crontabs på systemet ditt. Hver bruker har sin egen crontab, inkludert root (administrator). User crontabs er lagret i /var/spool/cron/crontabs/ . Kommandoen crontab -l vil vise crontab-filen for den nåværende brukeren. Du kan sjekke root crontab med sudo crontab -l .

I tillegg er det system crontab filen /etc/crontab som brukes til system-wide oppgaver. Vanligvis tar de form av kjørbare, rotteide skript plassert i /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ og /etc/cron.monthly/ mapper, og på noen distribusjoner, også /etc/cron.d/ mappen. Generelt sett trenger du ikke å håndtere disse oppgaver, da de fleste av dem opprettes automatisk av installerte applikasjoner.

Slik planlegger du oppgaver med Cron

Det høres enkelt: å planlegge oppgaver, bare legg dem til crontab. Siden crontab er en spesiell konfigurasjonsfil, anbefales det ikke å redigere det manuelt. I stedet bruker du crontab -e kommandoen. For å redigere root eller andre brukeres crontabs, kjør kommandoen med administrative privilegier og legg til brukernavn etter -u alternativet:

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

linux-cron-jobber-crontab-redaktør

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

Den andre delen av filen er den faktiske "tidsplanen" med dine planlagte oppgaver. Hver oppgave tar en linje (rad) i tabellen, med kolonner som representerer følgende verdier:

linux-cron-jobber-crontab

For å kunne planlegge oppgaver, trenger du å vite litt om crontabsyntaxen:

  • Tallene skal være heltall (hele tall), og du kan bruke stjernen (*) i noen av kolonnene som jokertegn, som betyr "hvert minutt / dag / måned ...".
  • I kolonnen "Dag i måneden", vær forsiktig så du ikke angir en dato som ikke forekommer i måneden som er angitt i kolonnen "Måned" (for eksempel 30. februar).
  • Både "Måned" og "Dag i uken" -kolonnene godtar korte navn i henholdsvis måneder og dager, og de er uaksensitive.
  • I kolonnen "Dag i uken" står både 0 og 7 for søndag. Timekolonnen krever "militærtid" (24-timers) format, men du kan ikke bruke tallet 24 - i stedet står 0 for 12. Dette skyldes at verdiene for minutt, time og ukedag starter ved 0 i stedet for 1.
  • Sekunder støttes ikke, slik at du ikke kan planlegge en oppgave på et bestemt sekund.

Hva du kan gjøre er å planlegge inkluderende tidsintervall ved hjelp av en bindestrek (14-22 under "Timer" løper oppgaven kontinuerlig fra kl. 22.00 til 22.00), eller kjør en enkelt oppgave flere ganger ved å definere en kommaseparert liste (1, 3, 5 under "Dag i uken" løper oppgaven på mandag, onsdag og fredag).

I mellomtiden er trinnverdier representert av et fremoverstrekk (/), og disse indikerer mengden hopper innenfor et område; For eksempel vil 3-20 / 3 under "Timer" løse oppgaven hver 3. time fra kl. 03.00 til 20.00. Dette er nyttig når du vil gjenta oppgavene hver 15. time fordi du kan kombinere en stjerne og et trinn (* / X). Du kan kombinere rekkevidde med lister og trinn med intervaller så lenge du bruker tall. Med andre ord, kombinasjoner som "jan-mar" eller "tis, fre-sun" er ikke tillatt.

Alternativt, i stedet for å sette en verdi for hver kolonne, kan du bare skrive @ uke, @år, @monthly, @daily eller @hourly på begynnelsen av en rad, etterfulgt av en kommando. Planlagt slik vil oppgavene løpe i første mulige tilfelle, slik at @ ukentlig vil kjøre ved midnatt den første dagen i uken. Hvis du vil kjøre en oppgave umiddelbart når systemet (re) starter, bruk kommandoen @reboot.

linux-cron-jobber-crontab-eksempel

I dette eksemplet har vi planlagt en sikkerhetskopi hver dag klokka 08:20 og 20:20. Bakgrunnen endres automatisk hver tredje dag klokken 19.00, og et skript vil se etter nye podcaster. De 10 beste programmene for å administrere podcaster på Linux De 10 beste programmene for å administrere podcaster på Linux Linux har ikke et godt utvalg av podcastklienter, men ikke bekymre deg - nesten alle moderne musikkspillere for Linux kan tjene som podcatcher. La oss se på alternativene. Les mer hver mandag kl. 10:20 og 20:20. En bursdagspåminnelse er satt til 25. mars, og den går hvert 30. minutt innen den angitte tidsrammen. Endelig sjekker et skript e-post hvert 15. minutt fra 8 til 20, men bare på arbeidsdager. Du er fri til å organisere crontab med mellomrom og faner mellom kolonner, men ikke innenfor dem (ikke legg mellom mellomrom mellom komma, bindestreker og skråstreker).

Hvis alt dette høres for komplisert, 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 å vite noen crontab-syntaks. De viser deg når jobben vil løpe neste, og gi maler for vanlige uttrykk. Crontab.guru er den beste av gjengen fordi den lar deg prøve test crontab syntaks, slik at du umiddelbart kan se hvordan endringene dine vil påvirke tidsplanen.

linux-cron-jobber-crontab-guru

Slik sjekker du om Cron-jobber utføres

Cron skal løpe stille i bakgrunnen og la deg jobbe uforstyrret mens det tar vare på 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. Hvordan fungerer en e-postserver? [Teknologi forklart] Hvordan fungerer en e-postserver? [Teknologi forklart] Bak hver e-post er en kraftig motor kalt e-postserveren som skyver e-postene via internett. Les mer . Ikke mange hjemmebrukere er villige til å konfigurere dette, og ikke mange distribusjoner gir det som standard (for eksempel, Ubuntu gjør det ikke). Den raskeste måten å sjekke opp på cron er å skanne systemloggen med denne kommandoen:

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

linux-cron-jobber-logg

Alternativet -i gjør forespørselen uskadelig. Det er mulig at cron vil ha sin egen loggfil et sted i /var/log/, så se det hvis denne kommandoen ikke gir nyttige resultater.

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

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

Ved å bruke et enkelt> symbol overskrives filen hver gang kommandoen kjører. For å unngå dette, bruk >> i stedet - det legger til produksjonen til den eksisterende filen.

Hva hvis Cron ikke jobber?

Det kan hende at du har lagt til noen oppgaver, sjekket systemloggene, og funnet ut at de ikke kjø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øres i bakgrunnen. Pass på at dette virkelig er tilfelle. Tjenesten er enten kalt crond eller bare cron.

For distribusjoner ved hjelp av systemd:

systemctl status cron

For distribusjoner ved hjelp av Upstart:

service cron status

linux-cron-jobber-tjeneste-status

Hvis distribusjonen din bruker den "gamle" System V init-tilnærmingen, liste alle tjenester med:

initctl list

og se om cron er oppført.

Har du til og med lov til å ha en crontab-fil?

Sjekk din /etc mappen for filer kalt cron.allow og cron.deny . På Ubuntu bør det heller ikke eksistere, noe som betyr at alle brukere har lov til å administrere cron-jobber. Men hvis det er en cron.allow fil, må den inneholde brukernavnet ditt. Omvendt, hvis filen cron.deny eksisterer, bør brukernavnet ditt ikke være i det. Hvis du cron.deny filen cron.deny, betyr det at bare rot og brukere som er oppført i cron.allow kan ha crontab-filer.

Er variablene dine riktig satt?

Crontab setter automatisk din SHELL-variabel til /bin/sh . Men hvis skallet ditt er fisk 7 Grunner til at du skal installere fiskeskallet 7 Grunner til at du bør installere fiskeskallen Liker ikke hvordan Linux-terminalen din fungerer? Hvorfor ikke installere et nytt skall? Et slikt skall er fisk, som introduserer funksjoner som burde ha blitt vanlig, men ikke. La oss ta en titt. Les mer eller bash, du bør endre SHELL-variabelen . På samme måte inneholder PATH-variabelen bare noen få kataloger som standard. Dette er hvor crontab ser etter Linux-kommandoer. Hvis cron-jobben din ikke klarer å løpe, kan det skyldes at crontab ikke "ser" kommandoen du har brukt. For å unngå dette, legg til kataloger som inneholder kommandoene til PATH-variabelen, skilt med kolonner:

PATH=/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 din crontabformatering på punkt?

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

  • legg til en tom linje på slutten av crontab-filen
  • unnslippe% -tegnet med et tilbakeslag hvis kommandoen inneholder den
  • skriv kommentarer som separate linjer som starter 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 System Settings> Task Scheduler- modulen. Med et greit grensesnitt som lar deg velge og justere alt på bare noen få museklikk, er KCron en fornøyelse å bruke.

linux-cron-jobber-kcron

Hvis du foretrekker GNOME, er GNOME Schedule for deg. Tilnærmingen er lik, selv om grensesnittet er forventet litt annerledes. Den tilbyr en avansert modus for finkornede modifikasjoner, og leveres med en panelapplet hvor du kan administrere oppgaver direkte.

linux-cron-jobber-gnome-planen

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

linux-cron-jobber-crontabui

Er det noen Cron alternativer?

Mens cron er ganske mye standard oppgaveplanlegger for Linux Planlegg og automatiser oppgaver i Linux med Gnome Schedule Planlegg og automatiser oppgaver i Linux med Gnome Schedule Read More, det er absolutt ikke den eneste. Kommandoen på kommandoen er perfekt for raske, engangsjobber som kan planlegges rett fra kommandolinjen, uten spesielle konfigurasjonsfiler. Hvis du trenger mer, er det GNUbatch, som introduserer begrepet avhengighet. Med GNUbatch kan du angi spesifikke forhold for hver jobb, eller gjøre en planlagt oppgave avhengig av en tidligere. Noe lignende kan oppnås med systemd tidtakere. Selv om det er mindre praktisk å konfigurere enn cron, kan systemd tidtakere huske om en oppgave savnet sin tidsplan mens datamaskinen var slått av, og kjøre den neste gang den er på.

Dette er noe som cron ikke kan gjøre alene. Som sådan er den egnet for servere og datamaskiner som kjører kontinuerlig, men det vil ikke utføre en jobb som var planlagt mens datamaskinen var slått av. Det er her anacron kommer inn i spill. Det er teknisk ikke et "alternativ" eller en erstatning for cron. I stedet kompletterer anacron cron og bør brukes sammen med det, hvilket er tilfelle på mange Linux-distribusjoner, inkludert Ubuntu og Ubuntu-baserte produkter. Anacron logger når en oppgave ble sist utført, og kontrollerer om det var noen ubesvarte tilfeller 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 per dag.

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

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

Image Credit: Schedule Board av Gonzalo Aragon via Shutterstock

In this article