Automatisch updaten in Linux

Als je een Linux server hebt draaien wil je natuurlijk dat het systeem tijdig de benodigde updates en eventuele upgrades ontvangt, om kwetsbaarheden te verhelpen en nieuwe functionaliteiten toe te voegen.

Dit kunt je natuurlijk periodiek handmatig doen, maar het is soms handiger om het te automatiseren.

Ervan uitgaande dat je een headless server gebruikt met Linux, dan kun je hiervoor een cronjob gebruiken. Gebruik je een systeem met desktop environment, dan open je de terminal hiervoor met Ctrl+Alt+T.

Een Cronjob of crontab is een Unix commando dat een programma of script op een ingesteld tijdstip uitvoert. Cronjobs worden gebruikt in Unix-achtige systemen als Linux, BSD en Apple Macintosh. Het woord ‘cron’ is afkomstig van het Engelse woord chronograph, dat een soort stopwatch is. Later is hier job (taak) aan toegevoegd.

Format

Belangrijk om te weten is het format van een cronjob, zodat je het juist moment instelt dat je de gewenste opdracht uitgevoerd wil hebben.

   ____________________________ minutes (0 - 59)
  |  __________________________ hours (0 - 23)
  | |   _______________________ day of the month (1 - 31)
  | |  |  _____________________ month ( 1 - 12)
  | |  |  |  __________________ day of the week (0 - 6) 
  | |  |  |  |                  (0 or 7 = Sunday, 1 = monday....6 = saturday)
  | |  |  |  |  
  | |  |  |  | 
  *  *  *  *  *  <command to execute>

Daarnaast kun je ook in plaats van de getallen bepaalde strings gebruiken:

StringActie
@hourlyElk uur
@daily of @midnightElke dag om middernacht
@weeklyWekelijks
@monthlyMaandelijks om middernacht
@yearly or @annually1 keer per jaar om middernacht
@reboot1 maal, na het opstarten

Een dergelijke cronjob opdracht ziet er dan zo uit:

@monthly <command to execute>

Een Cronjob aanmaken

We gaan ervan uit dat cron al is geïnstalleerd op het systeem, maar mocht dit niet het geval zijn, dan kun je cron installeren met de volgende opdracht:

$ sudo apt install cron

Als cron inderdaad is geïnstalleerd, dan kun je je cronjobs gaan toevoegen. Dit doe je met de -e van editor toevoeging.

$ crontab -e

Als je dit voor het eerst doet, dan zul je gevraagd worden met welke editor je dit wil doen. Ik kies hier voor Nano, omdat deze editor het meest intuïtief is in het gebruik.

Nu zal crontab geopend worden in de Nano teksteditor en kun je de taken gaan toevoegen.

Zoals je kunt zien heb ik 3 regels toegevoegd.

Regel 1 update het systeem, regel 2 upgrade de geïnstalleerde pakketten en de dependancies, en regel 3 zorgt ervoor dat overtallige dependancies verwijderd worden.

Alle drie de regels worden wekelijks op maandag uitgevoerd, de 1ste regel op het middaguur, de tweede 10 minuten later en de derde 20 minuten later, zodat elke regel voldoende tijd heeft om af te ronden.

Uiteindelijk heb ik ook een > /dev/null 2>&1 parameter toegevoegd, zodat de output van de opdrachten meteen verwijderd worden, daar ik deze toch niet lees. Gaan er dingen fout, dan kan het waardevol zijn om de output wel te loggen in een bestand en krijg je een toevoeging als > /var/log/apt/cronjoblog.log bijvoorbeeld.

Na het invoeren van de regels sla je de taken op met Ctrl+O en sluit je de teksteditor met Ctrl+X.

Hierna zal je systeem wekelijks de ingevoerde taken uitvoeren.

Cronjob generator

Hoewel de methodiek vrij duidelijk in de comments staat van je crontab, kun je ook een cronjob generator gebruiken om de juiste opdracht samen te stellen. Er zijn er verschillende, maar je kunt bijvoorbeeld DEZE gebruiken.