Hur man schemalägger uppgifter i Linux med Cron och Crontab

Hur man schemalägger uppgifter i Linux med Cron och Crontab

Visste du att Blade Runner är inställd 2019? Det är tre år från nu! För att inte tala om Tillbaka till framtiden 2 , där de tidsresor fram till 2015. Ändå har vi inte flygande bilar och det finns inga replikanter bland oss ​​(så vitt jag vet).





Det är lätt att känna sig besviken över nuvarande teknik när vi jämför den med fiktiva skildringar av framtiden. Ändå kan våra telefoner, datorer och till och med hus idag göra fantastiska saker. Möjligheten att automatisera uppgifter är en av dem.





Varje Linux-användare kan dra nytta av schemaläggningsuppgifter, oavsett om de är systemrelaterade (som att rensa gamla loggar och uppdatera paket ) eller betjäna användaren (kontrollera e -post, ladda ner podcaster ...). Windows -användare har haft Task Scheduler sedan Windows 95. Verktyget som gör samma jobb på Linux kallas cron, och här förklarar vi hur du använder det.





hur man stoppar krom från att använda så mycket minne

Vad är Cron?

Cron är en systemtjänst som körs i bakgrunden, söker efter schemalagda uppgifter och kör dem om den hittar någon. Uppgifterna - även kallade 'cron -jobb' - definieras i speciella konfigurationsfiler (crontabs), som cron skannar varje minut. Flera versioner av cron finns på olika Linux -distributioner. Till exempel kallas Fedoras gaffel av cron cronie , och det finns det också fcron , bcron , och dcron . Vissa har extrafunktioner, medan andra är mer fokuserade på säkerhet, men de är alla baserade på samma idé.

Den här guiden är skriven för vixie-cron, som är den mest utbredda versionen av cron och den du hittar på Ubuntu och dess derivat. Även om de flesta instruktioner också gäller andra cron -implementeringar kan det finnas mindre skillnader, så kolla deras manualer om du bestämmer dig för att byta.



Vad är en Crontab?

Om du menar allvar med att hantera din tid har du förmodligen en kalender av något slag - en app eller åtminstone ett papper. Crontab liknar din dators kalender väldigt mycket. Den innehåller information om schemalagda uppgifter och berättar för cron vilka kommandon som ska köras vid vilken tidpunkt.

Faktum är att flera crontabs finns på ditt system. Varje användare har sin egen crontab, inklusive root (administratören). Användare crontabs lagras i





/var/spool/cron/crontabs/

. De

crontab -l

kommandot listar crontab -filen för den aktuella användaren. Du kan kontrollera root crontab med





sudo crontab -l

.

Dessutom finns systemets crontab -fil

/etc/crontab

som används för systemövergripande uppgifter. Vanligtvis har de formen av körbara, rotägda skript placerade i

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, och

/etc/cron.monthly/

mappar och på vissa distributioner

/etc/cron.d/

mapp också. Generellt sett borde du inte behöva hantera dessa uppgifter, eftersom de flesta av dem skapas automatiskt av installerade applikationer.

Hur man schemalägger uppgifter med Cron

Det låter enkelt: för att schemalägga uppgifter, lägg bara till dem i din crontab. Eftersom crontab är en speciell konfigurationsfil rekommenderas det inte att redigera den manuellt. Använd istället

crontab -e

kommando. För att redigera root eller andra användares crontabs, kör kommandot med administratörsbehörigheter och lägg till deras användarnamn efter alternativet -u:

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

Crontab -filen har två sektioner. Den första innehåller miljövariabler som konfigureras automatiskt. Du kan säkert ändra PATH-, HOME- och SHELL -variablerna och ändra MAIL -variabeln.

Den andra delen av filen är den faktiska 'tidtabellen' med dina schemalagda uppgifter. Varje uppgift upptar en rad (rad) i tabellen, med kolumner som representerar följande värden:

För att lyckas schemalägga uppgifter måste du veta lite om crontab -syntaxen:

  • Siffrorna ska vara heltal (heltal), och du kan använda asterisken (*) i någon av kolumnerna som jokertecken, vilket betyder 'varje minut/dag/månad ...'.
  • I kolumnen 'Månadens dag', var försiktig så att du inte anger ett datum som inte förekommer under den månad som anges i kolumnen 'Månad' (till exempel den 30 februari).
  • Både kolumnerna 'Månad' och 'Veckodag' accepterar kortnamn i månader respektive dagar, och de är skiftlägeskänsliga.
  • I kolumnen 'Veckodag' står både 0 och 7 för söndagen. Kolumnen 'Hour' kräver formatet 'militär tid' (24-timmars), men du kan inte använda siffran 24-istället står 0 för 12 am Detta beror på att värdena för minut, timme och veckodag börjar vid 0 istället för 1.
  • Sekunder stöds inte, så du kan inte schemalägga en uppgift vid en viss sekund.

Vad du kan göra är att schemalägga inkluderande tidsintervaller med hjälp av en bindestreck (14-22 under 'Timmar' kör uppgiften kontinuerligt från 14.00 till 22.00), eller kör en enda uppgift flera gånger genom att definiera en kommaseparerad lista (1, 3,5 under 'Veckodag' kommer att köra uppgiften på måndag, onsdag och fredag).

Samtidigt representeras stegvärdena av ett snedstreck (/), och dessa indikerar mängden hoppar inom ett intervall; Exempelvis kommer 3-20/3 under 'Timmar' att utföra uppgiften var tredje timme från kl. 03.00 till 20.00 Detta är användbart när du vill upprepa uppgifter var X timme, eftersom du kan kombinera en asterisk och ett steg (*/X). Du kan kombinera intervall med listor och steg med intervall så länge du använder siffror. Med andra ord är kombinationer som 'jan-mar' eller 'tis, fre-sön' inte tillåtna.

Alternativt, istället för att ställa in ett värde för varje kolumn, kan du bara skriva @weekly, @yearly, @monthly, @daily eller @hourly i början av en rad, följt av ett kommando. Planerat så här kommer uppgifterna att köras vid den första möjliga instansen, så @weekly körs vid midnatt den första dagen i veckan. Om du vill köra en uppgift omedelbart när systemet (om) startas, använd kommandot @reboot.

I det här exemplet har vi schemalagd en säkerhetskopia varje dag 08:20 och 20:20. Tapeten ändras automatiskt var tredje dag klockan 19:00, och ett manus söker efter nya podcaster varje måndag klockan 10:20 och 20:20. En födelsedagspåminnelse ställs in den 25 mars och den körs var 30: e minut inom den angivna tidsramen. Slutligen kontrollerar ett skript e -post var 15: e minut från 8 till 20, men bara på vardagar. Du är fri att organisera din crontab med mellanslag och flikar mellan kolumner, men inte inom dem (lägg inte mellanslag mellan kommatecken, bindestreck och snedstreck).

Om allt detta låter för komplicerat, oroa dig inte - du kan alltid lita på internet. Verktyg som Crontab Generator , Crontab.guru , och Corntab hjälper dig att skapa cron -jobb utan att känna till någon crontab -syntax. De visar dig när jobbet ska köras nästa och ger mallar för vanliga uttryck. Crontab.guru är den bästa i gänget eftersom det låter dig live-testa crontab-syntax, så att du omedelbart kan se hur dina ändringar kommer att påverka schemat.

Hur man kontrollerar om Cron -jobb körs

Cron ska springa tyst i bakgrunden och låta dig arbeta ostört medan det tar hand om dina uppgifter. Men hur kan du se till att det faktiskt fungerar?

Cron har en inbyggd e-postmeddelandefunktion, men detta kräver att du installerar minst en enkel lokal e-postserver. Inte många hemanvändare är villiga att konfigurera detta, och inte många distributioner ger det som standard (till exempel gör inte Ubuntu). Det snabbaste sättet att kontrollera cron är att skanna systemloggen med det här kommandot:

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

Alternativet -i gör vår fråga skiftlägeskänslig. Det är möjligt att cron kommer att ha sin egen loggfil någonstans i

/var/log/

, så titta där om det här kommandot misslyckas med att ge användbara resultat.

Om du behöver spara utdata från ett visst cron -jobb kan du omdirigera det till en fil. Ange sökvägen och namnet på filen i den sista kolumnen på din crontab, efter kommandot du vill köra:

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

Om du använder en enda> symbol kommer filen att skrivas över varje gång kommandot körs. För att undvika detta, använd >> istället - det lägger ut utmatningen till den befintliga filen.

Vad händer om Cron inte fungerar?

Det kan hända att du har lagt till några uppgifter, kontrollerat systemloggarna och funnit att de inte körs som de ska. Här är några saker du bör tänka på - och vara försiktig med - när du försöker lösa problemet.

Kör cron -tjänsten?

Som du vet bör cron -demonen köras i bakgrunden. Se till att detta verkligen är fallet. Tjänsten kallas antingen crond eller bara cron.

För distributioner med systemd:

systemctl status cron

För distributioner med Upstart:

service cron status

Om din distribution använder den 'gamla' System V init -metoden, lista alla tjänster med:

hur man väljer efter färg i Photoshop
initctl list

och se om cron är listad.

Får du ens ha en crontab -fil?

Kolla din

/etc

mapp för filer med namnet

cron.allow

och

cron.deny

. På Ubuntu borde ingen av dem finnas, vilket innebär att alla användare får hantera cron -jobb. Men om det finns en

bästa gratis ljudbok -app för Android
cron.allow

filen måste den innehålla ditt användarnamn. Omvänt, om

cron.deny

filen finns, ditt användarnamn ska inte finnas i den. Lämna

cron.deny

fil tom betyder att endast root och användare listade i

cron.allow

kan ha crontab -filer.

Är dina variabler korrekt inställda?

Crontab ställer automatiskt in din SHELL -variabel till

/bin/sh

. Men om ditt skal är fisk eller bash, du bör ändra SHELL -variabeln

. På samma sätt innehåller PATH -variabeln bara några få kataloger som standard. Det är här crontab letar efter Linux -kommandon. Om ditt cron -jobb inte körs kan det bero på att crontab inte ser kommandot du har använt. För att undvika detta, lägg till kataloger som innehåller kommandona till PATH -variabeln, separerade med kolon:

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

Om du inte vill redigera detta i din crontab kan du definiera dessa variabler i skriptet du vill köra som ett cron -jobb.

Är din crontab -formatering korrekt?

Crontabs syntax är inte exakt smidig segling. Även om du verifierar det med onlineverktyg som nämnts tidigare kan ett mindre misstag fortfarande hindra cron från att utföra dina jobb. Var försiktig med att:

  • lägg till en tom rad i slutet av crontab -filen
  • undvik % -tecknet med ett snedstreck om ditt kommando innehåller det
  • skriva kommentarer som separata rader som börjar med #. Skriv inte kommentarer på samma rad som miljövariablerna, eller bredvid cron -jobbkommandon.

Måste du verkligen använda terminalen?

Absolut inte. KDE -användare kan schemalägga cron -jobb med KCron, som är tillgängligt från Systeminställningar> Aktivitetsschemaläggare modul. Med ett enkelt gränssnitt som låter dig välja och justera allt på bara några musklick, är KCron ett nöje att använda.

Om du föredrar GNOME, då GNOME Schema är för dig. Tillvägagångssättet är liknande, även om gränssnittet, förväntat, är något annorlunda. Det erbjuder ett avancerat läge för finkorniga ändringar och kommer med en panelapplet från vilken du kan hantera uppgifter direkt.

Du bör vara medveten om andra lösningar, som Crontab-UI och Minicron . De är mer lämpliga för användare som hanterar flera maskiner och cron-jobb, och en av deras coolaste funktioner är det webbaserade gränssnittet.

Finns det några Cron -alternativ?

Medan cron i stort sett är standarduppgiftschemaläggaren för Linux, är det verkligen inte den enda. De på kommando är perfekt för snabba engångsjobb som kan schemaläggas direkt från kommandoraden, utan speciella konfigurationsfiler. Om du behöver mer finns det GNUbatch , som introducerar begreppet beroende. Med GNUbatch kan du ställa in specifika villkor för varje jobb eller låta en schemalagd uppgift bero på en tidigare. Något liknande kan uppnås med systemtimers . Även om det är mindre praktiskt att konfigurera än cron, kan systemd -timers komma ihåg om en uppgift missade sitt schema medan datorn var avstängd och köra den nästa gång den är på.

Detta är något som cron inte kan göra ensam. Som sådan är det lämpligt för servrar och datorer som ständigt körs, men det kommer inte att utföra ett jobb som var schemalagt medan datorn var avstängd. Det är här anakron spelar in. Det är tekniskt sett inte ett 'alternativ' eller en ersättning för cron. Istället kompletterar anacron cron och bör användas tillsammans med det, vilket är fallet på många Linux-distributioner, inklusive Ubuntu och Ubuntu-baserade produkter. Anacron loggar när en uppgift senast kördes och kontrollerar om det fanns några missade instanser medan systemet stängdes av. Det kommer att köra dem när du slår på datorn igen, men varje uppgift kan utföras bara en gång om dagen.

Vissa versioner av cron, som fcron, erbjuder anacrons funktioner som standard. Avancerade användare kanske vill titta på Hcron eller SuperCron , som ger många förbättringar av grundläggande cron -funktioner, men är också något utmanande att hantera.

Hur är det med dig? Hur organiserar du dina digitala uppgifter? Vilka uppgifter planerar du på Linux? Dela dina berättelser och tips om hur du använder cron i kommentarerna.

Bildkredit: schemaläggningstavla av Gonzalo Aragon via Shutterstock

Dela med sig Dela med sig Tweet E-post 12 videosajter som är bättre än YouTube

Här är några alternativa videosajter till YouTube. De har alla en annan nisch, men är värda att lägga till i dina bokmärken.

Läs Nästa
Relaterade ämnen
  • Linux
  • Linux
Om författaren Ivana Isadora Devcic(24 artiklar publicerade)

Ivana Isadora är frilansande författare och översättare, Linux -älskare och KDE fangirl. Hon stöder och marknadsför gratis och öppen källkod, och hon letar alltid efter nya, innovativa appar. Ta reda på hur du kommer i kontakt här .

Mer från Ivana Isadora Devcic

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera