Hoe taken in Linux plannen met Cron en Crontab

Het vermogen om taken te automatiseren is een van die futuristische technologieën die er al is. Elke Linux-gebruiker kan profiteren van planningssysteem- en gebruikerstaken, dankzij cron, een gebruiksvriendelijke achtergrondservice.

Het vermogen om taken te automatiseren is een van die futuristische technologieën die er al is.  Elke Linux-gebruiker kan profiteren van planningssysteem- en gebruikerstaken, dankzij cron, een gebruiksvriendelijke achtergrondservice.
Advertentie

Wist je dat Blade Runner speelt in 2019? Dat is over drie jaar! Om nog maar te zwijgen over Back to the Future 2, waar ze de tijd nemen om door te reizen naar 2015. Toch hebben we geen vliegende auto's en zijn er geen replicanten onder ons (voor zover ik weet).

linux-cron-jobs-quote

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 binnen enkele seconden op Linux bijwerken. 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 "cron-taken" genoemd 5 Beginner Linux-instellingsideeën voor Cron-taken en shell-scripts 5 Beginner Linux-instellingsideeën voor Cron-taken en shell-scripts Met bash-scripting kunt u in één keer een complexe reeks taken uitvoeren, dus het is geweldig voor uitgebreide en repetitieve behoeften. Het is ook een geweldige manier om de terminal te leren kennen. Meer lezen "- 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/ . Met de opdracht crontab -l wordt het crontab-bestand voor de huidige gebruiker weergegeven. U kunt de rootcrontab controleren met sudo crontab -l .

Daarnaast is er het crontab-bestand van het systeem /etc/crontab dat wordt gebruikt voor systeembrede taken. Gewoonlijk nemen ze de vorm aan van uitvoerbare, root-owned scripts geplaatst in /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 moet u niet met deze taken te maken hebben, omdat de meeste automatisch door geïnstalleerde applicaties worden gemaakt.

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 opdracht crontab -e . 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 username -e

linux-cron-jobs-crontab-editor

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 actuele "tijdschema" met uw geplande taken. Elke taak neemt een regel (rij) in de tabel in, met kolommen die de volgende waarden vertegenwoordigen:

linux-cron-jobs-crontab

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

  • De getallen moeten gehele getallen (hele getallen) zijn en u kunt de asterisk (*) in een van de kolommen gebruiken als jokerteken, wat betekent "elke minuut / dag / maand ...".
  • Zorg ervoor dat in de kolom "Dag van de maand" geen datum wordt ingesteld die niet voorkomt in de maand die is opgegeven in de kolom "Maand" (bijvoorbeeld 30 februari).
  • Zowel kolommen 'Maand' en 'Dag van de week' accepteren korte namen voor respectievelijk maanden en dagen, en ze zijn niet hoofdlettergevoelig.
  • In de kolom "Dag van de week" staan ​​zowel 0 als 7 voor zondag. De kolom "Uur" vereist het "militaire tijd" (24-uur) formaat, maar u kunt nummer 24 niet gebruiken - in plaats daarvan staat 0 voor 12 uur. 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 opnemen met een koppelteken (14-22 onder "Uren" zal de taak continu uitvoeren van 14.00 uur tot 22.00 uur), of één taak meerdere keren uitvoeren door een door komma's gescheiden lijst (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 3 tot 20 uur. Dit is handig als u taken om de X uur wilt herhalen, omdat u een asterisk en een stap (* / X). 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.

linux-cron-jobs-crontab-voorbeeld

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. U bent vrij om uw crontab te organiseren met spaties en tabs tussen kolommen, maar niet binnen deze kolommen (plaats geen spaties tussen komma's, koppeltekens en schuine strepen).

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 meteen kunt zien hoe uw wijzigingen van invloed zijn op het schema.

linux-cron-jobs-crontab-guru

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 staat 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

linux-cron-jobs-log

De optie -i maakt ons query-hoofdletter ongevoelig. Het is mogelijk dat cron zijn eigen logbestand ergens in /var/log/, dus kijk daar of 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

linux-crontaken service-status

Als uw distributie de "oude" System V init-benadering gebruikt, vermeldt u alle services met:

initctl list

en kijk of cron wordt vermeld.

Mag je zelfs een crontab-bestand?

Controleer de map /etc voor bestanden met de cron.allow en cron.deny . Op Ubuntu mogen geen van beide bestaan, wat betekent dat alle gebruikers cron-taken mogen beheren. Als er echter een cron.allow bestand is, moet dit uw gebruikersnaam bevatten. Omgekeerd, als het bestand cron.deny bestaat, zou uw gebruikersnaam er niet in moeten staan. Als u het cron.deny bestand leeg laat, betekent dit dat alleen de root en gebruikers die in cron.allow worden vermeld, crontab-bestanden kunnen 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 het zijn dat crontab de opdracht die u hebt gebruikt niet "ziet". 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 cron-taak wilt uitvoeren.

Staat je crontab opmaak 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 module Systeeminstellingen> Taakplanning . Met een eenvoudige interface waarmee u alles in slechts enkele muisklikken kunt kiezen en aanpassen, is KCron een plezier om te gebruiken.

linux-cron-jobs-kcron

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.

linux-cron-jobs-gnome-schema

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.

linux-cron-jobs-crontabui

Zijn er alternatieven voor Cron?

Terwijl 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 voert hem uit als hij de volgende keer aanstaat.

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 wellicht 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

In this article