Hoe taken in Linux plannen met Cron en Crontab

Hoe taken in Linux plannen met Cron en Crontab / Linux

Wist je dat Blade Runner is ingesteld in 2019? Dat is over drie jaar! Laat staan Terug naar de toekomst 2, waar ze naartoe gaan in 2015. Toch hebben we geen vliegende auto's en zijn er geen replicanten onder ons (voor zover ik weet).

Het is gemakkelijk om teleurgesteld te zijn over de huidige technologie wanneer we het vergelijken met fictieve afbeeldingen van de toekomst. Toch kunnen onze telefoons, computers en zelfs huizen geweldige dingen doen 5 DIY Home Automation-projecten om aan de slag te gaan met je Smart Home 5 DHZ-projecten om aan de slag te gaan met je Smart Home Als het gaat om het maken van slimme huizen, zijn de meeste mensen weet gewoon niet waar te beginnen. Hier zijn vijf eenvoudige basisprojecten voor beginners die je nu kunt bouwen. Lees verder . De mogelijkheid om taken te automatiseren is er een van.

Elke Linux-gebruiker kan profiteren van roosteringstaken, of deze nu systeemgerelateerd zijn (zoals het opruimen van oude logbestanden en het updaten van pakketten. Hoe kan een of alle apps op Linux in seconden worden bijgewerkt? Een of alle apps op Linux in seconden bijwerken De Linux-terminal maakt het eenvoudig om één app op uw computer bij te werken, of alle beschikbare updates tegelijk toe te passen. Hier is hoe. Lees meer) of ten dienste van de gebruiker (e-mail checken, podcasts downloaden ...). Windows-gebruikers hadden Task Scheduler 4 Saaie taken die u kunt automatiseren met de Windows-taakplanner 4 Saaie taken die u kunt automatiseren met de Windows-taakplanner Uw tijd is te waardevol om te worden verspild met repetitieve taken. Laten we u laten zien hoe u taken kunt automatiseren en plannen. We hebben ook enkele geweldige voorbeelden. Lees meer sinds Windows 95. Het hulpprogramma dat dezelfde taak op Linux uitvoert, wordt cron genoemd en hier leggen we uit hoe u het kunt gebruiken.

Wat is Cron?

Cron is een systeemservice die op de achtergrond wordt uitgevoerd, controleert op geplande taken en voert ze uit als deze wordt gevonden. De taken - ook wel genoemd “cron jobs 5 Beginner Linux Installatie Ideeën Voor Cron Jobs & Shell Scripts Beginner Linux Installatie Ideeën Voor Cron Jobs & Shell Scripts Met bash scripting, kan je in één keer een complexe reeks taken doen, dus het is geweldig voor uitgebreide en repetitieve behoeften. Het is ook een geweldige manier om de terminal te leren kennen. Lees verder ” - worden gedefinieerd in speciale configuratiebestanden (crontabs), die cron elke minuut scant. Verschillende versies van cron zijn te vinden op verschillende Linux-distributies. Fedora's vork van cron heet bijvoorbeeld cronie, en er zijn ook fcron, bcron en dcron. Sommige hebben extra functies, andere zijn meer gericht op beveiliging, maar ze zijn allemaal gebaseerd op hetzelfde idee.

Deze gids is geschreven voor vixie-cron, de meest voorkomende versie van cron en degene die je op Ubuntu en zijn afgeleiden vindt. Hoewel de meeste instructies ook van toepassing zijn op andere cron-implementaties, kunnen er kleine verschillen zijn, dus controleer hun handleidingen als u besluit om over te schakelen.

Wat is een Crontab?

Als je serieus bezig bent met het beheren van je tijd, heb je waarschijnlijk een kalender van een soort Organiseer je tijd met deze 4 Linux Calendar-apps Organiseer je tijd met deze 4 Linux Calendar-apps Is het logisch om nog steeds een agenda-app op de desktop te gebruiken? We denken van wel, vooral om toegang tot evenementen op elk gesynchroniseerd apparaat mogelijk te maken. Deze Linux-agenda-apps zijn bijzonder handig. Lees meer - een app of op zijn minst een stuk papier. Crontab lijkt heel erg op de agenda van je computer. Het bevat informatie over geplande taken en vertelt cron welke opdrachten op welk moment moeten worden uitgevoerd.

In feite staan ​​er meerdere crontabs op uw systeem. Elke gebruiker heeft zijn eigen crontab, inclusief root (de beheerder). Gebruikerscrontabs worden opgeslagen in / Var / spool / cron / crontabs /. De crontab -l commando zal het crontab-bestand voor de huidige gebruiker weergeven. U kunt de root-crontab controleren met sudo crontab -l.

Daarnaast is er het crontab-bestand van het systeem / Etc / crontab die wordt gebruikt voor systeembrede taken. Gewoonlijk nemen ze de vorm aan van scripts van uitvoerbare scripts die in de root zijn geplaatst /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, en /etc/cron.monthly/ mappen en op sommige distributies, de /etc/cron.d/ map ook. Over het algemeen zou u niet met deze taken te maken hoeven te hebben, omdat de meeste van hen automatisch worden gemaakt door geïnstalleerde applicaties.

Hoe taken plannen met Cron

Het klinkt simpel: om taken in te plannen, voeg je ze gewoon toe aan je crontab. Omdat crontab een speciaal configuratiebestand is, is het niet aan te raden het handmatig te bewerken. Gebruik in plaats daarvan de crontab -e commando. Als u de crontabs van root of andere gebruikers wilt bewerken, voert u de opdracht uit met beheerdersbevoegdheden en voegt u hun gebruikersnaam toe na de optie -u:

sudo crontab -u root -e
sudo crontab -u gebruikersnaam -e

Het crontab-bestand bestaat uit twee delen. De eerste bevat omgevingsvariabelen die automatisch worden ingesteld. U kunt de variabelen PATH, HOME en SHELL veilig wijzigen en de MAIL-variabele wijzigen.

Het tweede deel van het bestand is het werkelijke “rooster” met uw geplande taken. Elke taak neemt een regel (rij) in de tabel in, met kolommen die de volgende waarden vertegenwoordigen:

Om met succes taken in te plannen, moet u iets weten over de syntaxis van crontab:

  • De getallen moeten gehele getallen zijn (hele getallen) en u kunt de asterisk (*) in een van de kolommen gebruiken als jokerteken, wat betekent “elke minuut / dag / maand ... ”.
  • In de “Dag van de maand” kolom, pas op dat u geen datum instelt die niet voorkomt in de maand die is opgegeven in de “Maand” kolom (bijvoorbeeld 30 februari).
  • Beide “Maand” en “Dag van de week” kolommen accepteren korte namen voor respectievelijk maanden en dagen en zijn hoofdlettergevoelig.
  • In de “Dag van de week” kolom, beide 0 en 7 staan ​​voor zondag. De “Uur” kolom vereist de “militaire tijd” (24-uurs) formaat, maar je kunt nummer 24 niet gebruiken - in plaats daarvan staat 0 voor 12 a.m. Dit komt omdat de waarden voor minuut, uur en dag van de week beginnen bij 0 in plaats van 1.
  • Seconden worden niet ondersteund, dus je kunt een taak niet op een bepaald moment plannen.

Wat u kunt doen, is inclusief tijdreeksen met een koppelteken (14-22 onder “uren” zal de taak continu uitvoeren vanaf 14.00 uur tot 22:00 uur) of meerdere keren een taak uitvoeren door een door komma's gescheiden lijst te definiëren (1,3,5 onder “Dag van de week” voert de taak uit op maandag, woensdag en vrijdag).

Ondertussen worden stapwaarden weergegeven door een schuine streep (/), en deze geven de hoeveelheid overslaan aan binnen een bereik; bijvoorbeeld 3-20 / 3 onder “uren” voert de taak om de drie uur uit van 15.00 tot 20.00 uur. Dit is handig als u om de X uur taken wilt herhalen, omdat u een asterisk en een stap (* / X) kunt combineren. U kunt bereiken combineren met lijsten en stappen met bereiken, zolang u nummers gebruikt. Met andere woorden, combinaties zoals “jan-mar” of “Di, vr-zo” zijn niet toegestaan.

Als alternatief kunt u in plaats van een waarde voor elke kolom in te stellen, gewoon @weekly, @yearly, @monthly, @daily of @hourly aan het begin van een rij schrijven, gevolgd door een opdracht. Op deze manier gepland, zullen de taken bij de eerste mogelijke instantie worden uitgevoerd, dus zou @weekly om middernacht op de eerste dag van de week draaien. Als u een taak direct wilt uitvoeren wanneer het systeem (opnieuw) wordt gestart, gebruikt u de opdracht @reboot.

In dit voorbeeld hebben we elke dag om 08:20 en 20:20 een back-up gepland. De achtergrond verandert automatisch om de drie dagen om 19:00 uur en een script controleert op nieuwe podcasts De 10 beste apps voor het beheren van podcasts op Linux De 10 beste apps voor het beheren van podcasts op Linux Linux hebben geen geweldige keuze aan podcast-clients, maar maak je geen zorgen - bijna elke moderne muziekspeler voor Linux kan als een podcatcher dienen. Laten we de opties eens bekijken. Lees meer elke maandag om 10:20 en 20:20. Een verjaardagsmelding is ingesteld op 25 maart en wordt om de 30 minuten uitgevoerd binnen het opgegeven tijdsbestek. Ten slotte controleert een script elke 15 minuten een e-mail van 8 tot 20, maar alleen op werkdagen. Je bent vrij om je crontab te organiseren met spaties en tabs tussen kolommen, maar niet binnen deze kolommen (plaats geen spaties tussen komma's, koppeltekens en slashes).

Als dit allemaal te gecompliceerd klinkt, maak je geen zorgen - je kunt altijd vertrouwen op internet. Hulpprogramma's zoals Crontab Generator, Crontab.guru en Corntab helpen u cron-taken te maken zonder crontab-syntaxis te kennen. Ze tonen u wanneer de taak vervolgens wordt uitgevoerd en bieden sjablonen voor veelgebruikte uitdrukkingen. Crontab.guru is de beste van het stel omdat het u live laat: test de syntaxis van crontab, zodat u onmiddellijk kunt zien hoe uw wijzigingen van invloed zijn op het schema.

Controleren of Cron-taken worden uitgevoerd

Cron moet rustig op de achtergrond rennen en je ongestoord laten werken terwijl het voor je taken zorgt. Maar hoe kun je ervoor zorgen dat het echt werkt?

Cron heeft een ingebouwde functie voor het melden van e-mail, maar hiervoor moet ten minste een eenvoudige lokale mailserver worden ingesteld. Hoe werkt een e-mailserver? [Technology Explained] Hoe werkt een e-mailserver? [Technology Explained] Achter elke e-mail bevindt zich een krachtige engine, de e-mailserver die de e-mails via internet pusht. Lees verder . Niet veel thuisgebruikers zijn bereid om dit te configureren, en niet veel distributies bieden dit standaard aan (bijvoorbeeld Ubuntu doet dit niet). De snelste manier om te controleren op cron is om het systeemlogboek te scannen met deze opdracht:

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

De optie -i maakt ons query-hoofdletter ongevoelig. Het is mogelijk dat cron ergens zijn eigen logbestand heeft / Var / log /, dus kijk daar als deze opdracht geen bruikbare resultaten oplevert.

Als u de uitvoer van een bepaalde cron-taak wilt opslaan, kunt u deze omleiden naar een bestand. Geef het pad en de naam van het bestand op in de laatste kolom van uw crontab, na de opdracht die u wilt uitvoeren:

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

Als u een enkel symbool gebruikt, wordt het bestand overschreven telkens wanneer de opdracht wordt uitgevoerd. Om dit te voorkomen, gebruikt u >> in plaats daarvan voegt u de uitvoer toe aan het bestaande bestand.

Wat als Cron niet werkt?

Het kan gebeuren dat u enkele taken hebt toegevoegd, de systeemlogboeken hebt gecontroleerd en hebt vastgesteld dat ze niet worden uitgevoerd zoals zou moeten. Hier zijn enkele dingen waar u rekening mee moet houden - en wees voorzichtig - wanneer u probeert het probleem op te lossen.

Is de cron-service actief??

Zoals je weet, zou de cron-daemon op de achtergrond moeten draaien. Zorg ervoor dat dit echt het geval is. De service wordt crond of gewoon cron genoemd.

Voor distributies met systemd:

systemctl status cron

Voor distributies met Upstart:

service cron-status

Als uw distributie de “oud” Systeem V init benadering, lijst alle diensten met:

initctl lijst

en kijk of cron wordt vermeld.

Mag je zelfs een crontab-bestand??

Controleer je /enz map voor bestanden met de naam cron.allow en cron.deny. Op Ubuntu mogen geen van beide bestaan, wat betekent dat alle gebruikers cron-taken mogen beheren. Echter, als er een is cron.allow bestand, moet het uw gebruikersnaam bevatten. Omgekeerd, als het cron.deny bestand bestaat, moet uw gebruikersnaam er niet in staan. Het verlaten van de cron.deny file blank betekent dat alleen root en gebruikers worden vermeld in cron.allow kan crontab-bestanden hebben.

Zijn uw variabelen correct ingesteld?

Crontab stelt uw SHELL-variabele automatisch in op / Bin / sh. Echter, als je shell naar keuze vis is 7 Redenen waarom je de Fish Shell zou moeten installeren 7 Redenen waarom je de Fish Shell zou moeten installeren Vind je het niet leuk hoe je Linux-terminal werkt? Waarom geen nieuwe shell installeren? Een dergelijke shell is vis, die functies introduceert die alledaags zouden moeten zijn, maar dat niet deden. Laten we kijken. Meer lezen of bash, u moet de SHELL-variabele wijzigen. Op dezelfde manier bevat de variabele PATH standaard maar een paar mappen. Dit is waar crontab naar Linux-commando's zoekt. Als uw cron-taak niet wordt uitgevoerd, kan dit zijn omdat crontab dat niet doet “zien” de opdracht die je hebt gebruikt. Om dit te voorkomen, voegt u mappen toe met de opdrachten aan de variabele PATH, gescheiden door dubbele punten:

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

Als u dit niet in uw crontab wilt bewerken, kunt u deze variabelen definiëren in het script dat u als een cron-taak wilt uitvoeren..

Staat je crontab op punt?

De syntaxis van Crontab verloopt niet bepaald soepel. Zelfs als u het verifieert met eerder genoemde online tools, kan een kleine fout nog steeds voorkomen dat cron uw taken uitvoert. Wees voorzichtig met:

  • voeg een lege regel toe aan het einde van het crontab-bestand
  • ontsnappen aan het% -teken met een backslash als uw opdracht het bevat
  • schrijf opmerkingen als afzonderlijke regels beginnend met #. Schrijf geen opmerkingen op dezelfde regel als de omgevingsvariabelen of naast cron-taakopdrachten.

Moet u echt de terminal gebruiken?

Absoluut niet. KDE-gebruikers kunnen cron-taken plannen met KCron, die toegankelijk is via de Systeeminstellingen> Taakplanner module. Met een eenvoudige interface waarmee je alles kunt kiezen en aanpassen in slechts een paar muisklikken, is KCron een genot om te gebruiken.

Als u GNOME prefereert, dan is GNOME Schedule iets voor u. De aanpak is vergelijkbaar, hoewel de interface naar verwachting enigszins afwijkt. Het biedt een geavanceerde modus voor fijnmazige aanpassingen en wordt geleverd met een panel-applet waarmee u taken direct kunt beheren.

Je moet je bewust zijn van andere oplossingen, zoals Crontab-UI en Minicron. Ze zijn meer geschikt voor gebruikers die meerdere machines en cron-taken beheren en een van hun coolste functies is de webgebaseerde interface.

Zijn er alternatieven voor Cron??

Hoewel cron vrijwel de standaard taakplanner voor Linux is Schedule & Automate Tasks In Linux met Gnome Schedule & Automate Tasks in Linux met Gnome Schedule Read More is dit zeker niet de enige. De opdracht at is perfect voor snelle, eenmalige taken die direct vanaf de opdrachtregel kunnen worden gepland, zonder speciale configuratiebestanden. Als je meer nodig hebt, is er GNUbatch, dat het begrip afhankelijkheid introduceert. Met GNUbatch kunt u specifieke voorwaarden voor elke taak instellen of een geplande taak afhangen van een eerdere taak. Iets soortgelijks kan worden bereikt met systemd-timers. Hoewel het minder praktisch is om te configureren dan cron, kunnen systeemtimers zich herinneren of een taak zijn planning heeft gemist terwijl de computer uit stond, en de taak uitvoeren wanneer hij de volgende keer wordt gebruikt.

Dit is iets dat cron niet alleen kan doen. Als zodanig is het geschikt voor servers en computers die constant actief zijn, maar het voert geen taken uit die gepland waren terwijl de computer uit stond. Hier komt anacron om de hoek kijken. Het is technisch gezien geen “alternatief” of een vervanging voor cron. In plaats daarvan vult anacron cron aan en moet het daarnaast worden gebruikt, wat het geval is op veel Linux-distributies, waaronder op Ubuntu en Ubuntu gebaseerde producten. Anacron logt wanneer een taak voor het laatst is uitgevoerd en controleert of er gemiste instanties waren terwijl het systeem was uitgeschakeld. Het zal ze uitvoeren wanneer u de computer weer inschakelt, maar elke taak kan slechts eenmaal per dag worden uitgevoerd.

Sommige versies van cron, zoals fcron, bieden standaard de functies van anacron. Gevorderde gebruikers willen misschien naar Hcron of SuperCron kijken, wat veel verbeteringen aan de basiscron-functies brengt, maar die ook enigszins uitdagend zijn om te beheren.

En jij dan? Hoe organiseer je je digitale taken? Welke taken plant u op Linux? Deel uw verhalen en tips voor het gebruik van cron in de opmerkingen.

Beeldcredits: schemabord van Gonzalo Aragon via Shutterstock

Ontdek meer over: Linux.