# Uitleg van het crontab-commando

De cron-daemon (crond) is een achtergrondservice op Unix-achtige besturingssystemen die geplande commando's uitvoert. Het leest configuratie uit crontab-bestanden (cron-tabellen) die bepalen wanneer en hoe vaak elk commando moet worden uitgevoerd.

## Syntaxis

Het crontab-commando beheert crontab-bestanden per gebruiker:

```
crontab [-u user] [-l | -r | -e | -i] [file]
```

## Opties

- **`-e`**: Bewerk de crontab van de huidige gebruiker in de standaardeditor ($VISUAL of $EDITOR). De nieuwe crontab wordt geïnstalleerd nadat de editor is afgesloten.
- **`-l`**: Toon de crontab van de huidige gebruiker naar standaarduitvoer.
- **`-r`**: Verwijder de crontab van de huidige gebruiker volledig.
- **`-i`**: Vraag om bevestiging voor het verwijderen (gebruikt met -r).
- **`-u user`**: Werk met de crontab van de opgegeven gebruiker in plaats van uw eigen. Vereist root-rechten.
- **`file`**: Installeer de crontab vanuit het opgegeven bestand. Gebruik - voor standaardinvoer.

## Crontab-bestandsindeling

Elke regel in een crontab-bestand is een omgevingsvariabeletoewijzing, een opmerking (beginnend met #), of een cron-taak met dit formaat:

```
┌───────────── minuut (0–59)
│ ┌───────────── uur (0–23)
│ │ ┌───────────── dag van de maand (1–31)
│ │ │ ┌───────────── maand (1–12 of JAN–DEC)
│ │ │ │ ┌───────────── dag van de week (0–6 of SUN–SAT)
│ │ │ │ │
* * * * *  uit te voeren commando
```

## Veldoperatoren

- *** (asterisk)**: Komt overeen met elke mogelijke waarde voor het veld.
- **, (comma)**: Specificeert een lijst met waarden. Voorbeeld: 1,15 in het dag-van-de-maand-veld betekent de 1e en 15e.
- **- (hyphen)**: Definieert een inclusief bereik. Voorbeeld: 9-17 in het uurveld betekent elk uur van 9 tot en met 17.
- **/ (slash)**: Definieert een stap. Voorbeeld: */10 in het minuutveld betekent elke 10 minuten. Kan worden gecombineerd met een bereik: 1-30/5.

## Speciale tekenreeksen

In plaats van de vijf tijdvelden kunt u een van deze afkortingen gebruiken:

| String | Equivalent |
|--------|-----------|
| `@yearly` / `@annually` | `0 0 1 1 *` |
| `@monthly` | `0 0 1 * *` |
| `@weekly` | `0 0 * * 0` |
| `@daily` / `@midnight` | `0 0 * * *` |
| `@hourly` | `0 * * * *` |
| `@reboot` | `Run once at startup` |

## Omgevingsvariabelen

U kunt omgevingsvariabelen bovenaan een crontab-bestand instellen. De meest voorkomende zijn:

- **SHELL**: De shell die wordt gebruikt om commando's uit te voeren (standaard: /bin/sh).
- **PATH**: Het zoekpad voor commando's. Het standaard-PATH van cron is minimaal (meestal /usr/bin:/bin), dus gebruik altijd absolute paden of stel PATH expliciet in.
- **MAILTO**: Waar de uitvoer van commando's naartoe wordt gestuurd. Stel in op "" om e-mail te onderdrukken. Standaard wordt uitvoer gemaild naar de crontab-eigenaar.
- **CRON_TZ**: Stel de tijdzone in voor de crontab (niet op alle systemen ondersteund). Zonder deze instelling gebruikt cron de systeemtijdzone.

```
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=admin@example.com

*/5 * * * * /home/user/scripts/backup.sh
```

## Systeem-crontab vs. gebruiker-crontab

Gebruiker-crontabs (bewerkt met crontab -e) hebben vijf tijdvelden plus het commando. De systeem-crontab (/etc/crontab) en bestanden in /etc/cron.d/ hebben een extra veld tussen de tijdvelden en het commando: de gebruikersnaam waaronder het commando wordt uitgevoerd.

Systeem-crontab voorbeeld:

```
# /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m  h  dom mon dow user    command
*/15 *  *   *   *   root    /usr/local/bin/system-check.sh
0    2  *   *   *   backup  /usr/local/bin/nightly-backup.sh
```

## Veelvoorkomende valkuilen

### % (percent sign)

Het procentteken (%) heeft een speciale betekenis in crontab: het wordt vertaald naar een nieuwe regel, en alles na het eerste % wordt als standaardinvoer naar het commando gestuurd. Om een letterlijk % te gebruiken, escapt u het als \%.

```
# Wrong — the % will be interpreted
0 0 * * * echo "Date: $(date +%Y-%m-%d)"

# Correct — escape the %
0 0 * * * echo "Date: $(date +\%Y-\%m-\%d)"
```

### PATH

Cron draait met een minimaal PATH. Scripts die afhankelijk zijn van commando's in /usr/local/bin of andere mappen moeten absolute paden gebruiken of PATH bovenaan de crontab instellen.

### Day-of-month + day-of-week

Wanneer zowel dag-van-de-maand als dag-van-de-week beperkt zijn (niet *), voert cron het commando uit wanneer een van beide velden overeenkomt (OR-logica), niet wanneer beide overeenkomen. Bijvoorbeeld: 0 0 1 * 5 draait om middernacht op de 1e van elke maand EN elke vrijdag.

### Timezone

Cron gebruikt standaard de systeemtijdzone. Als uw server in UTC staat maar u taken in een lokale tijdzone wilt, gebruik CRON_TZ (waar ondersteund) of converteer tijden handmatig.

### Output and logging

Standaard mailt cron alle uitvoer (stdout en stderr) naar de crontab-eigenaar. Om een taak stil te maken, omleid uitvoer: command > /dev/null 2>&1. Om uitvoer te loggen, omleid naar een bestand: command >> /var/log/myjob.log 2>&1.

```
# Discard all output
*/5 * * * * /path/to/script.sh > /dev/null 2>&1

# Log output to a file
*/5 * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1
```

## Praktische voorbeelden

- [`*/5 * * * *`](https://crontab.run/nl/every-5-minutes) — run every 5 minutes
- [`0 0 * * *`](https://crontab.run/nl/daily) — run once a day at midnight
- [`0 9 * * 1-5`](https://crontab.run/nl/every-weekday-at-9am) — run at 9 AM on weekdays
- [`0 0 1 * *`](https://crontab.run/nl/every-month) — run at midnight on the 1st of every month
- [`0 0 * * 0`](https://crontab.run/nl/every-sunday) — run at midnight every Sunday

Canonical: https://crontab.run/nl/command

---

Maintained by Jsmon — https://jsmon.sh
