Wat is crontab en hoe plan je er taken mee?

Auteur: Gepubliceerd

In het kort: Crontab is een tabel met een planning van opdrachten die de cron-service automatisch uitvoert, meestal op Linux- en Unix-systemen. De naam verwijst ook naar het commando waarmee je die tabel beheert. Met crontab kun je bijvoorbeeld dagelijks een back-up maken of om de paar minuten een script uitvoeren, zonder handmatig op de server in te loggen.

Wat is het verschil tussen cron en crontab?

Cron is een service die op de achtergrond draait, de planning controleert en de vastgelegde opdrachten op de opgegeven tijden uitvoert. Crontab bevat de configuratie van die planning. Alleen een regel toevoegen is niet genoeg: de cron-service moet geïnstalleerd zijn en draaien, en de computer of server moet op het geplande tijdstip aanstaan.

Gebruikers kunnen elk een eigen crontab hebben. Een taak wordt uitgevoerd met de rechten van de eigenaar van die tabel. Een opdracht die een gewone gebruiker toevoegt, krijgt dus niet automatisch beheerdersrechten. Dat is belangrijk voor zowel de beveiliging als de toegang tot bestanden.

Cron is geschikt voor terugkerende technische taken: rapporten genereren, gegevens synchroniseren of tijdelijke bestanden verwijderen. Het reageert echter niet uit zichzelf op gebeurtenissen, zoals het plaatsen van een bestelling. Het voert opdrachten uit op de tijden die in de configuratie staan.

Hoe lees je een regel in crontab?

In de crontab van een gebruiker bevat elke regel vijf tijdvelden, gevolgd door de opdracht:

minuut uur dag_van_de_maand maand dag_van_de_week opdracht

De velden worden gescheiden door spaties of tabs. De tabel laat zien wat ze betekenen:

VeldGebruikelijk bereikBetekenis van het sterretje *
Minuut0–59Elke minuut
Uur0–23Elk uur
Dag van de maand1–31Elke dag van de maand
Maand1–12Elke maand
Dag van de week0–7, meestal staan 0 en 7 voor zondagElke dag van de week

Een voorbeeld:

30 2 * * * /home/anna/bin/backup.sh

Deze regel voert het script backup.sh dagelijks om 02:30 uit. Het tijdstip wordt geïnterpreteerd volgens de tijdzone die cron gebruikt. Meestal is dat de tijdzone van de server, niet die van de computer waarop iemand de planning bewerkt.

Bij het opgeven van tijdstippen kun je ook komma’s, bereiken en stapgroottes gebruiken:

Een stapgrootte is geen wachttijd vanaf het einde van de taak. Met */15 wordt de opdracht volgens de klok gestart, ook als de vorige uitvoering nog bezig is. */7 in het minutenveld levert bovendien niet de hele dag gelijke intervallen van zeven minuten op: na minuut 56 volgt minuut 0 van het volgende uur.

Een belangrijke valkuil zit in de velden voor de dag van de maand en de dag van de week. In veelgebruikte implementaties hoeft slechts één van deze voorwaarden te gelden als beide velden een beperking bevatten. 0 9 1 * 1 betekent dus om 09:00 op de eerste dag van de maand of op maandag, niet uitsluitend op een maandag die op de eerste dag van de maand valt. Raadpleeg de documentatie van jouw implementatie voor de precieze syntaxis, meestal via man 5 crontab.

Hoe voeg je een taak toe en controleer je die?

Begin voor de zekerheid met een onschuldige test die de datum naar een bestand schrijft. Daarmee controleer je de planning los van de werking van het eigenlijke script.

  1. Open de tabel van de huidige gebruiker met crontab -e.
  2. Voeg de onderstaande regel toe en pas de paden aan jouw systeem aan.
  3. Sla het bestand op en sluit de editor.
  4. Controleer na één tot twee minuten het uitvoerbestand.
* * * * * /usr/bin/date >> /home/anna/cron-test.log 2>&1

De operator >> voegt de uitvoer aan het bestand toe in plaats van het te overschrijven. Met 2>&1 worden foutmeldingen naar dezelfde plek gestuurd. De doelmap moet bestaan en de gebruiker moet er schrijfrechten hebben.

Het commando crontab -l toont de opgeslagen taken. Verwijder na een geslaagde test de testregel via crontab -e en voeg de daadwerkelijke planning toe. Pas op met crontab -r: dit verwijdert de volledige tabel van de gebruiker, niet één afzonderlijke regel.

Verwar de tabel van een gebruiker niet met het systeembestand /etc/crontab. In dit bestand en in de gebruikelijke bestanden in /etc/cron.d/ staat tussen de tijdvelden en de opdracht een extra veld met de naam van de gebruiker die de taak uitvoert.

Waarom werkt een script handmatig wel, maar via cron niet?

Cron voert opdrachten uit in een andere, meestal beperktere omgeving dan de terminal van de gebruiker. Ga er niet van uit dat cron de shellconfiguratie inleest, dezelfde variabelen kent of in de map van het script begint.

Controleer bij het opsporen van problemen vooral:

Als een taak langer kan duren dan het interval tussen twee uitvoeringen, gebruik dan een vergrendeling om gelijktijdige uitvoeringen te voorkomen. Dat kan bijvoorbeeld met flock, als dit hulpmiddel beschikbaar is. Cron biedt die bescherming niet zelf.

Wanneer heb je meer nodig dan crontab?

De klassieke cron haalt taken die zijn gemist terwijl de computer uit stond doorgaans niet in. Ook de overgang naar zomer- of wintertijd kan invloed hebben op uitvoeringen rond het omschakelmoment. Het precieze gedrag hangt af van de implementatie. Overweeg voor een laptop of voor taken die achteraf moeten worden ingehaald anacron of een passend geconfigureerde systemd-timer.

Voer voordat je een belangrijke taak toevoegt de opdracht handmatig uit als de gebruiker die de taak moet uitvoeren. Controleer daarna de uitvoering via cron en leg eventuele fouten vast. Controleer bij back-ups ook of je de gegevens kunt herstellen: een script dat zonder problemen draait, bewijst nog niet dat de back-up bruikbaar is.

Zie ook: Wat is 2FA?

Lees ook

Lees hoe PHP-FPM PHP-verzoeken verwerkt, verschilt van een webserver en hoe je processen afstemt op verkeer en hostingcapaciteit.
Ontdek hoe BIND als open DNS-serversoftware domeinen beheert, welke rollen het vervult en wanneer zelf beheren zinvol is.
Lees wat het Poolse REGON-register en -nummer betekenen, hoe ze verschillen van NIP en KRS en hoe je bedrijfsgegevens controleert.