Så här schemalägger du uppdrag i Linux med Cron och Crontab

Så här schemalägger du uppdrag i Linux med Cron och Crontab / Linux

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 reser fram till 2015. Men vi har inte flygande bilar och det finns inga replikanter bland oss ​​(så vitt jag vet).

Det är lätt att känna sig besviken över den nuvarande tekniken när vi jämför det med framtida fiktiva framträdanden. Ändå kan våra telefoner, datorer och tomhus idag göra fantastiska saker 5 DIY-hemautomationsprojekt för att komma igång med ditt smarta hem 5 DIY-hemautomationsprojekt för att komma igång med ditt smarta hem När det gäller att skapa smarta hem, vet bara inte var du ska börja Här är fem grundläggande nybörjare smarta hemprojekt som du kan bygga just nu. Läs mer . 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 städa upp gamla loggar och uppdatera paket Så här uppdaterar du en eller alla appar på Linux i sekunder Hur man uppdaterar en eller alla appar på Linux i sekunder Linux-terminalen gör det enkelt att uppdatera en enda app på din dator, eller tillämpa alla tillgängliga uppdateringar på en gång. Så här. Läs mer) eller betjäna användaren (kontrollera e-post, hämta podcaster ...). Windows-användare har haft Task Scheduler 4 Boring-uppgifter du kan automatisera med Windows Task Scheduler 4 Boring-uppgifter du kan automatisera med Windows Task Scheduler Din tid är för värdefull för att bli bortkastad med upprepade uppgifter. Låt oss visa dig hur du automatiserar och schemalägger uppgifter. Vi har också några bra exempel. Läs mer sedan Windows 95. Verktyget som gör samma jobb på Linux heter cron, och här förklarar vi hur du använder det.

Vad är Cron?

Cron är en systemtjänst som körs i bakgrunden, kontrollerar schemalagda uppgifter och kör dem om det hittar något. Uppgifterna - även kallade “cron-jobb 5 Nybörjare Linux-inställningsidéer för Cron Jobs & Shell-skript 5 Nybörjare Linux-inställningsidéer för Cron Jobs & Shell-skript Med bash scripting kan du göra en komplex serie av uppgifter på ett snabbt sätt så det är perfekt för utarbetade och repetitiva behov. Det är också ett bra sätt att lära känna terminalen. Läs mer ” - definieras i speciella konfigurationsfiler (crontabs), vilken cron skannar varje minut. Flera versioner av cron finns på olika Linux-distributioner. Fedoras gaffel av cron kallas till exempel cronie, och det finns också fcron, bcron och dcron. Vissa har extrafunktioner, medan andra är mer fokuserade på säkerhet, men de bygger alla på samma idé.

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

Vad är en Crontab?

Om du är seriös om att hantera din tid, har du förmodligen en kalender av något slag. Ordna din tid med dessa 4 Linux-kalenderappar. Organisera din tid med dessa 4 Linux-kalenderapp. Är det vettigt att du fortfarande använder en stationär kalenderapp? Vi tror det, särskilt för att möjliggöra åtkomst till händelser på en synkroniserad enhet. Dessa Linux kalender apps är särskilt användbara. Läs mer - en app eller åtminstone en bit papper. Crontab är väldigt mycket som datorns kalender. Den innehåller information om schemalagda uppgifter, som berättar cron som kommandon körs vid vilken tidpunkt.

Faktum är att flera crontabs finns på ditt system. Varje användare har sin egen crontab, inklusive root (administratören). User crontabs lagras i / Var / spool / cron / crontabs /. De crontab-l kommando kommer att lista crontab filen för den nuvarande användaren. Du kan kontrollera root crontab med sudo crontab-l.

Dessutom finns det system crontab-filen / Etc / crontab som används för systemövergripande uppgifter. Vanligtvis har de formen av körbara, root-ägda skript placerade i /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, och /etc/cron.monthly/ mappar, och på vissa utdelningar, /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: att schemalägga uppgifter, lägg bara till dem i din crontab. Eftersom crontab är en speciell konfigurationsfil rekommenderas det inte att redigera det manuellt. Använd istället crontab -e kommando. För att redigera root eller andra användares crontabs, kör kommandot med administrativa behörigheter och lägg till användarnamnet efter -u-alternativet:

sudo crontab -u root -e
sudo crontab -u användarnamn -e

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

Den andra delen av filen är den faktiska “tidtabell” 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 behöver du veta lite om crontabsyntaxen:

  • Numren ska vara heltal (heltal), och du kan använda asterisken (*) i någon av kolumnerna som ett jokertecken, vilket betyder “varje minut / dag / månad ... ”.
  • I “Månadens dag” kolumn, var försiktig så att du inte anger ett datum som inte uppstår i den månad som anges i “Månad” kolumn (till exempel 30 februari).
  • Både “Månad” och “Dag i veckan” kolumner accepterar korta namn för månader respektive dagar, och de är otillräckliga för fallet.
  • I “Dag i veckan” kolumn, både 0 och 7 står för söndag. De “Timme” kolumn kräver “militär tid” (24-timmarsformat), men du kan inte använda siffran 24 - istället står 0 för 12 a.m. Detta beror på att värdena för minut, timme och dag i veckan 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 samtliga tidsintervall med en bindestreck (14-22 under “timmar” kommer att köra uppgiften kontinuerligt från 2 pm till 10 pm), eller kör en enda uppgift flera gånger genom att definiera en kommaseparerad lista (1,3,5 under “Dag i veckan” kommer att köra uppgiften på måndag, onsdag och fredag).

Under tiden är stegvärden representerade av en framåtskärning (/), och dessa indikerar mängden hoppar inom ett intervall; till exempel 3-20 / 3 under “timmar” kommer att köra uppgiften var tredje timme från 3:00 till 8:00 Det här är användbart när du vill repetera uppgifter varje X-timme, eftersom du kan kombinera en asterisk och ett steg (* / X). Du kan kombinera intervall med listor och steg med intervaller så länge du använder siffror. Med andra ord, kombinationer som “jan-mar” eller “Tis, fre-sön” är inte tillåten.

Alternativt kan du, i stället för att ange ett värde för varje kolumn, bara skriva @ vecka, @år, @monthly, @dagligt eller @hourigt i början av en rad, följt av ett kommando. Planeras så här, kommer uppgifterna att köras i första möjliga fall, så @ veckan skulle springa vid midnatt den första dagen i veckan. Om du vill köra en uppgift omedelbart när systemet (re) startar, använd kommandot @reboot.

I det här exemplet har vi planerat en säkerhetskopia varje dag klockan 08:20 och 20:20. Bakgrunden ändras automatiskt var tredje dag klockan 19:00 och ett skript kommer att söka efter nya podcaster De 10 bästa programmen för hantering av podcaster på Linux De 10 bästa programmen för hantering av podcaster på Linux Linux har inte ett bra val av podcastklienter, men oroa dig inte - nästan alla moderna musikspelare för Linux kan fungera som podcatcher. Låt oss ta en titt på alternativen. Läs mer varje måndag klockan 10:20 och 20:20. En påminnelse om födelsedagen är inställd 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å arbetsdagar. 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 veta någon crontabsyntax. De visar dig när jobbet kommer att springa nästa och ge mallar för vanliga uttryck. Crontab.guru är det bästa av gänget eftersom det låter dig live-test crontab-syntax, så du kan genast se hur dina förändringar kommer att påverka schemat.

Hur man kontrollerar om Cron-jobb utförs

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

Cron har en inbyggd e-postnotifieringsfunktion, men det krävs att du konfigurerar minst en enkel lokal e-postserver. Hur fungerar en e-postserver? [Teknologi förklarad] Hur fungerar en e-postserver? [Teknologi förklarad] Bakom varje mail är en kraftfull motor som heter e-postservern som driver e-post via internet. Läs mer . Inte många hemanvändare är villiga att konfigurera detta, och inte många distribueringar ger det som standard (till exempel, Ubuntu gör det inte). Det snabbaste sättet att kolla på cron är att skanna systemloggen med det här kommandot:

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

Alternativet -i gör att vår fråga är otillräcklig. Det är möjligt att cron kommer att ha sin egen loggfil någonstans i / Var / log /, så se det här kommandot misslyckas med att ge användbara resultat.

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

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

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

Vad 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 borde. Här är några saker du bör överväga - och var försiktig med - när du försöker fixa problemet.

Är cron-tjänsten igång?

Som du vet borde cron-demonen springa 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 “gammal” System V init-tillvägagångssätt, lista alla tjänster med:

initctl lista

och se om cron är listad.

Har du till och med tillåtit att få en crontab-fil?

Kolla din /etc mapp för filer som heter cron.allow och cron.deny. På Ubuntu borde inte existera, vilket innebär att alla användare får hantera cron-jobb. Men om det finns en cron.allow fil, det måste innehålla ditt användarnamn. Omvänt, om cron.deny filen finns, ditt användarnamn ska inte vara i det. 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 ett val 7 Grunderna för att du ska installera Fish Shell 7 Anledningar till varför du bör installera Fish Shell Gillar du inte hur din Linux-terminal fungerar? Varför inte installera ett nytt skal? Ett sådant skal är fisk, som introducerar funktioner som borde ha blivit vanliga, men det gjorde det inte. Låt oss ta en titt. Läs mer eller bash, du ska ändra SHELL-variabeln. På samma sätt innehåller PATH-variabeln bara några kataloger som standard. Det här är där crontab letar efter Linux-kommandon. Om ditt cronjobb misslyckas, kan det bero på att crontab inte gör det “se” det kommando du har använt. För att undvika detta, lägg till kataloger som innehåller kommandon till PATH-variabeln, åtskilda av kolonner:

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

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

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

Behöver 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 tweak allt med några få musklick, är KCron ett nöje att använda.

Om du föredrar GNOME, är GNOME Schedule för dig. Tillvägagångssättet är likartat, även om gränssnittet förväntas vara något annorlunda. Det erbjuder ett avancerat läge för finkorniga modifieringar, och levereras 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 är ganska mycket standard schemaläggare för Linux Schema & Automatisera uppgifter i Linux med Gnome Schedule Schedule & Automatisera uppgifter i Linux med GNOME Schema Läs mer, det är verkligen inte den enda. Kommandot kommandot ä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 göra en planerad uppgift beror på en tidigare. Något liknande kan uppnås med systemd timers. Ä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ör den nästa gång den är på.

Det här är något som cron inte kan göra ensam. Som sådan är den lämplig för servrar och datorer som ständigt körs, men det kommer inte att utföra ett jobb som planerades när datorn var avstängd. Det här är där anakron kommer till spel. Det är tekniskt inte ett “alternativ” eller en ersättning för cron. Istället kompletterar anacron cron och ska användas tillsammans med den, vilket är fallet på många Linux-distributioner, inklusive Ubuntu och Ubuntu-baserade produkter. Anacron loggar när en uppgift slutfördes, och kontrollerar om det fanns några missade instanser medan systemet var avstängt. Det kommer att köra dem när du sätter på datorn igen, men varje uppgift kan utföras bara en gång om dagen.

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

Hur är det med dig? Hur organiserar du dina digitala uppgifter? Vilka uppgifter planerar du på Linux? Dela dina historier och tips för att använda cron i kommentarerna.

Bildkredit: schema av Gonzalo Aragon via Shutterstock

Utforska mer om: Linux.