Online zetten: elke nacht met cron
Het script uit les 41 werkt als jij het start. Nu laat je de server het zelf doen, elke nacht.
Een regel in de crontab
cron is een dienst op elke Ubuntu-server die commando's op vaste tijden draait. Elke gebruiker heeft een eigen lijst, de crontab. Open de jouwe, als sam en zonder sudo:
crontab -e
De eerste keer vraagt hij welke editor je wilt:
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
Druk op Enter voor nano. Onder de regels met een # zet je één regel:
30 3 * * * bash /home/sam/backup.sh >> /home/sam/backups/log.txt 2>&1
De eerste vijf velden zeggen wanneer:
| Veld | Hier | Betekenis |
|---|---|---|
| minuut | 30 | op minuut 30 |
| uur | 3 | van 3 uur 's nachts |
| dag van de maand | * | elke dag |
| maand | * | elke maand |
| dag van de week | * | elke dag van de week |
Daarna komt het commando. Schrijf hele paden, met /home/sam en niet ~. >> …/log.txt 2>&1 zet alles wat het script zegt, ook de fouten, achter elkaar in log.txt. Daar lees je achteraf wat er gebeurde terwijl jij sliep.
Sla op en sluit nano; cron zegt crontab: installing new crontab. crontab -l toont je lijst.
Niet tot morgen wachten
Kijk hoe laat de server het vindt:
date
Tue Nov 3 14:10:12 UTC 2026
Let op UTC: de server rekent in de tijd van Greenwich, een of twee uur achter op Nederland. Neem het uur dat date toont. Zet met crontab -e de tijd op twee minuten vanaf nu, hier 14:12:
12 14 * * * bash /home/sam/backup.sh >> /home/sam/backups/log.txt 2>&1
Wacht tot die minuut voorbij is, en kijk:
ls -l ~/backups
tail ~/backups/log.txt
Zet de tijd daarna met crontab -e terug op 30 3.
Er gaat iets mis
Er komt geen back-up, en geen log.txt
Oorzaak: de map ~/backups bestaat niet. Cron kan log.txt dan niet maken, en start het script niet eens.
Oplossing: maak de map met mkdir ~/backups, en probeer het opnieuw met de tijd op twee minuten vanaf nu.
De back-up komt op een ander uur
Oorzaak: je rekende met de tijd van Nederland, en de server rekent in UTC.
Oplossing: reken de tijd om, of laat hem staan: 3:30 UTC is in Nederland ook midden in de nacht.
permission denied in log.txt
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
Oorzaak: sam zit niet in de groep docker. Bij het inloggen met ssh merk je dat meteen, maar cron draait ook als jij er niet bij bent.
Oplossing: zet sam in de groep zoals in les 30, en probeer het script met de hand.
No such file or directory in log.txt
/home/sam/backup.sh: line 4: cd: /root/gastenboek: No such file or directory
Oorzaak: je zette de regel met sudo crontab -e in de lijst van root. Het script draait dan als root, en voor root is ~ de map /root.
Oplossing: haal de regel daar weg met sudo crontab -e, en zet hem in je eigen lijst met crontab -e, zonder sudo.
Door naar les 43: de back-ups naar je laptop.