Taken plannen in Linux met Cron en Crontab

Taken plannen in Linux met Cron en Crontab

Wist je dat Blade Runner speelt zich af in 2019? Dat is over drie jaar! Laat staan Terug naar de toekomst 2 , waar ze in de tijd reizen naar 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 als we het vergelijken met fictieve afbeeldingen van de toekomst. Toch kunnen onze telefoons, computers en zelfs huizen tegenwoordig geweldige dingen doen. De mogelijkheid om taken te automatiseren is er een van.





Elke Linux-gebruiker kan profiteren van het plannen van taken, of ze nu systeemgerelateerd zijn (zoals het opschonen van oude logboeken en pakketten bijwerken ) of de gebruiker bedienen (e-mail checken, podcasts downloaden...). Windows-gebruikers hebben Taakplanner sinds Windows 95. Het hulpprogramma dat hetzelfde werk op Linux doet, heet cron, en hier zullen we uitleggen hoe het te gebruiken.





hoe te voorkomen dat Chrome zoveel geheugen gebruikt?

Wat is Cron?

Cron is een systeemservice die op de achtergrond draait, controleert op geplande taken en deze uitvoert als deze wordt gevonden. De taken -- ook wel 'cron jobs' genoemd -- zijn vastgelegd in speciale configuratiebestanden (crontabs), die elke minuut door cron worden gescand. Er zijn verschillende versies van cron te vinden op verschillende Linux-distributies. Fedora's vork van cron heet bijvoorbeeld vriend(in) , en er zijn ook fcron , bcron , en dcron . Sommige hebben extra functies, terwijl andere meer gericht zijn 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 derivaten zult vinden. Hoewel de meeste instructies ook van toepassing zijn op andere cron-implementaties, kunnen er kleine verschillen zijn, dus raadpleeg hun handleidingen als u besluit over te stappen.



Wat is een Crontab?

Als je serieus je tijd wilt beheren, heb je waarschijnlijk een of andere kalender - een app of op zijn minst een stuk papier. Crontab lijkt veel op de agenda van uw computer. Het bevat de informatie over geplande taken en vertelt cron welke opdrachten op welk moment moeten worden uitgevoerd.

In feite zijn er verschillende crontabs op uw systeem. Elke gebruiker heeft zijn eigen crontab, inclusief root (de beheerder). Crontabs van gebruikers worden opgeslagen in





/var/spool/cron/crontabs/

. De

crontab -l

commando zal het crontab-bestand voor de huidige gebruiker weergeven. Je kunt de root-crontab controleren met





sudo crontab -l

.

Daarnaast is er het systeemcrontab-bestand

/etc/crontab

die wordt gebruikt voor systeembrede taken. Meestal nemen ze de vorm aan van uitvoerbare scripts die eigendom zijn van de root en die in

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, en

/etc/cron.monthly/

mappen, en bij sommige distributies is de

/etc/cron.d/

map ook. Over het algemeen hoeft u zich niet bezig te houden met deze taken, aangezien de meeste automatisch worden gemaakt door geïnstalleerde applicaties.

Taken plannen met Cron

Het klinkt eenvoudig: om taken in te plannen, voeg je ze gewoon toe aan je crontab. Aangezien crontab een speciaal configuratiebestand is, wordt het niet aanbevolen om het handmatig te bewerken. Gebruik in plaats daarvan de

crontab -e

opdracht. Om de crontabs van root of andere gebruikers te bewerken, voert u de opdracht uit met beheerdersrechten en voegt u hun gebruikersnaam toe na de optie -u:

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

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

Het tweede deel van het bestand is het eigenlijke 'rooster' met je geplande taken. Elke taak beslaat een regel (rij) in de tabel, met kolommen die de volgende waarden vertegenwoordigen:

Om taken met succes te plannen, moet je iets weten over de crontab-syntaxis:

  • De getallen moeten gehele getallen zijn (hele getallen), en u kunt de asterisk (*) in een van de kolommen als jokerteken gebruiken, wat betekent 'elke minuut/dag/maand...'.
  • Zorg ervoor dat u in de kolom 'Dag van de maand' geen datum instelt die niet valt in de maand die is opgegeven in de kolom 'Maand' (bijvoorbeeld 30 februari).
  • Zowel de kolommen 'Maand' als 'Dag van de week' accepteren korte namen voor respectievelijk maanden en dagen en zijn niet hoofdlettergevoelig.
  • In de kolom 'Dag van de week' staan ​​zowel 0 als 7 voor zondag. Voor de kolom 'Uur' is de notatie 'militaire tijd' (24-uurs) vereist, maar u kunt het getal 24 niet gebruiken -- in plaats daarvan staat 0 voor 12 uur 's morgens. Dit komt omdat de waarden voor minuut, uur en dag van de week beginnen op 0 in plaats van 1.
  • Seconden worden niet ondersteund, dus je kunt een taak niet op een bepaalde seconde plannen.

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

Ondertussen worden stapwaarden weergegeven door een schuine streep (/), en deze geven het aantal overslaan binnen een bereik aan; bijvoorbeeld 3-20/3 onder 'Uren' voert de taak elke drie uur uit van 3 uur 's ochtends tot 8 uur 's avonds. Dit is handig wanneer u taken elke X uur wilt herhalen, omdat u een asterisk en een stap (*/X) kunt combineren. U kunt bereiken combineren met lijsten en stappen met bereiken, zolang u maar getallen 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 op de eerste mogelijke instantie worden uitgevoerd, dus @weekly zou om middernacht op de eerste dag van de week worden uitgevoerd. Als u een taak onmiddellijk wilt uitvoeren wanneer het systeem (her)opstart, gebruik dan het @reboot-commando.

In dit voorbeeld hebben we elke dag een back-up gepland om 08:20 en 20:20. De achtergrond verandert automatisch om de drie dagen om 19:00 uur en een script controleert elke maandag om 10:20 en 20:20 op nieuwe podcasts. Er is een verjaardagsherinnering ingesteld voor 25 maart en deze wordt elke 30 minuten uitgevoerd binnen het opgegeven tijdsbestek. Ten slotte controleert een script elke 15 minuten van 8 tot 20 minuten de e-mail, maar alleen op werkdagen. Je bent vrij om je crontab te ordenen met spaties en tabs tussen kolommen, maar niet daarbinnen (plaats geen spaties tussen komma's, koppeltekens en slashes).

Als dit allemaal te ingewikkeld klinkt, hoeft u zich geen zorgen te maken - u kunt altijd vertrouwen op internet. Hulpmiddelen zoals Crontab-generator , Crontab.guru , en Corntab helpen je bij het maken van cron-taken zonder enige crontab-syntaxis te kennen. Ze laten u zien wanneer de taak de volgende keer wordt uitgevoerd en bieden sjablonen voor veelgebruikte uitdrukkingen. Crontab.guru is de beste van het stel omdat je de syntaxis van crontab live kunt testen, zodat je meteen kunt zien hoe je wijzigingen het schema zullen beïnvloeden.

Hoe te controleren of Cron-taken worden uitgevoerd

Cron wordt verondersteld stil op de achtergrond te draaien en je ongestoord te laten werken terwijl het voor je taken zorgt. Maar hoe weet je zeker dat het echt werkt?

Cron heeft een ingebouwde functie voor e-mailmeldingen, maar hiervoor is minimaal een eenvoudige lokale mailserver nodig. Niet veel thuisgebruikers zijn bereid dit te configureren, en niet veel distributies bieden het standaard (bijvoorbeeld Ubuntu niet). De snelste manier om cron te controleren, is door het systeemlogboek te scannen met deze opdracht:

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

De -i optie maakt onze query hoofdletterongevoelig. 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 moet opslaan, kunt u deze omleiden naar een bestand. Geef het pad en de naam van het bestand op in de laatste kolom van je crontab, na het commando dat je wilt uitvoeren:

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

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

Wat als Cron niet werkt?

Het kan gebeuren dat je 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 waar u voorzichtig mee moet zijn - wanneer u het probleem probeert op te lossen.

Is de cron-service actief?

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

Voor distributies met systemd:

systemctl status cron

Voor distributies die Upstart gebruiken:

service cron status

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

hoe maak je een foto een transparante achtergrond?
initctl list

en kijk of cron wordt vermeld.

Mag je zelfs een crontab-bestand hebben?

Controleer je

/etc

map voor bestanden met de naam

cron.allow

en

cron.deny

. Op Ubuntu zouden geen van beide mogen bestaan, wat betekent dat alle gebruikers cron-taken mogen beheren. Als er echter een

Skype maakt geen verbinding met internet
cron.allow

bestand, moet het uw gebruikersnaam bevatten. Omgekeerd, als de

cron.deny

bestand bestaat, zou uw gebruikersnaam er niet in moeten staan. het verlaten van de

cron.deny

bestand leeg betekent dat alleen root en gebruikers vermeld in

cron.allow

kan crontab-bestanden hebben.

Zijn je variabelen goed ingesteld?

Crontab stelt uw SHELL-variabele automatisch in op

/bin/sh

. Echter, als jouw schelp naar keuze is vis of bash, je moet de SHELL-variabele veranderen

. Evenzo bevat de variabele PATH standaard slechts een paar mappen. Hier zoekt crontab naar Linux-commando's. Als je cron-taak niet wordt uitgevoerd, kan het zijn dat crontab het commando dat je hebt gebruikt niet 'ziet'. Om dit te voorkomen, voegt u mappen met de opdrachten toe 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 je dit niet in je crontab wilt wijzigen, kun je deze variabelen definiëren in het script dat je als cron-job wilt uitvoeren.

Klopt je crontab-opmaak?

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

  • voeg een lege regel toe aan het einde van het crontab-bestand
  • ontsnap aan het %-teken met een backslash als uw opdracht dit bevat
  • schrijf opmerkingen als aparte regels die beginnen met #. Schrijf geen opmerkingen op dezelfde regel als de omgevingsvariabelen, of naast cron job-opdrachten.

Moet je de terminal echt gebruiken?

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

Als je de voorkeur geeft aan GNOME, dan GNOME-schema is voor jou. De aanpak is vergelijkbaar, hoewel de interface naar verwachting iets anders is. Het biedt een geavanceerde modus voor fijnmazige wijzigingen en wordt geleverd met een paneel-applet van waaruit u taken rechtstreeks kunt beheren.

U moet op de hoogte 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 webinterface.

Zijn er Cron-alternatieven?

Hoewel cron vrijwel de standaard taakplanner voor Linux is, is het zeker niet de enige. De op commando is perfect voor snelle, eenmalige taken die rechtstreeks vanaf de opdrachtregel kunnen worden gepland, zonder speciale configuratiebestanden. Als je meer nodig hebt, is er GNUbatch , die het begrip afhankelijkheid introduceert. Met GNUbatch kunt u specifieke voorwaarden instellen voor elke taak, of een geplande taak laten afhangen van een eerdere taak. Iets soortgelijks kan worden bereikt met systeemtimers . Hoewel minder praktisch om te configureren dan cron, kunnen systemd-timers onthouden of een taak zijn planning heeft gemist terwijl de computer uit stond, en deze de volgende keer dat deze aanstaat, uitvoeren.

Dit is iets dat cron niet alleen kan. Als zodanig is het geschikt voor servers en computers die constant actief zijn, maar het zal geen taak uitvoeren die was gepland terwijl de computer uit stond. Dit is waar anacron komt in het spel. Het is technisch gezien geen 'alternatief' of vervanging voor cron. In plaats daarvan is anacron een aanvulling op cron en zou het ernaast moeten worden gebruikt, wat het geval is bij veel Linux-distributies, waaronder op Ubuntu en Ubuntu gebaseerde producten. Anacron registreert 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 aanzet, maar elke taak kan slechts één keer per dag worden uitgevoerd.

Sommige versies van cron, zoals fcron, bieden standaard de functies van anacron. Gevorderde gebruikers willen misschien kijken naar Hcron of SuperCron , die veel verbeteringen brengen aan de basisfuncties van cron, 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.

Afbeelding tegoed: planbord door Gonzalo Aragon via Shutterstock

Deel Deel Tweeten E-mail 12 videosites die beter zijn dan YouTube

Hier zijn enkele alternatieve videosites voor YouTube. Ze bezetten elk een andere niche, maar zijn de moeite waard om aan uw bladwijzers toe te voegen.

Lees volgende
Gerelateerde onderwerpen
  • Linux
  • Linux
Over de auteur Ivana Isadora Devcic(24 artikelen gepubliceerd)

Ivana Isadora is een freelance schrijver en vertaler, Linux-liefhebber en KDE-fangirl. Ze ondersteunt en promoot gratis en open source software en is altijd op zoek naar nieuwe, innovatieve apps. Ontdek hoe u in contact kunt komen hier .

Meer van Ivana Isadora Devcic

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren