Automatische Updates des Servers per Cronjob planen

Automatische Updates sind mit Vorsicht zu genießen.
Es gibt auch ein auto-update tool von ubuntu „unattended upgrades“. Dieses habe ich auf meinem Server und allen Containern/VMs zwar eingerichtet, aber dennoch, wenn ich gelegentlich schaue, sind noch viele Updates ausstehend.

Da ich jedoch nicht täglich/wöchentlich manuell aktualisieren möchte, habe ich das ganze jetzt automatisiert. So kann ich zwar nicht schauen, ob es Updates gibt die man vielleicht nicht aktualisieren sollte, weil sie neue Fehler/Sicherheitslücken reinbringen. Da das aber denke ich viel seltener ist, als dass ein Server wegen veralteter Software sicherheitsgefährdet ist, habe ich das also so gemacht:

man schreibt ein Script, welches man dann im crontab hinzufügt und zur gewünschten Zeit ausführen lässt.

Beispiel:

  • login als root auf einem container oder dem Server selber:

nano diesencontainerupdaten.sh

Inhalt des Skripts:

# Container aktualisieren und neustarten, falls nötig

apt update && apt upgrade -y && if [ -f /var/run/reboot-required ]; then
echo "Reboot required after kernel update" 
reboot
else
echo "No reboot required"
fi

Die Verkettung mit „&&“ sorgt dafür, dass die Befehle definitiv nur nacheinander ausgeführt werden.

  • Datei mit chmod +x diesencontainerupdaten.sh ausführbar machen
  • wenn ihr nicht sicher seid, in welchem Verzeichnis sich die Datei jetzt befindet: realpath diesencontainerupdaten.sh —> z.B. /root/diesencontainerupdaten.sh
  • cron mit crontab -e oder, wenn nicht vorhanden, mit nano /etc/crontab öffnen

ganz unten am besten dann den eigentlichen cron job erstellen, indem ihr sowas ganz unten reinschreibt z.B.:
#dieser cronjob aktualisiert die Maschine jeden Montag um 23 Uhr 05 und startet wenn noetig neu: 05 23 * * 1 /root/diesencontainerupdaten.sh

Kleine Korrektur: vorher hatte ich hier noch zwischen 1 und /root… ein „root“ stehen, das gehört da aber nicht rein. Cron-Jobs werden standardmäßig unter dem Benutzerkonto ausgeführt, unter dem sie eingerichtet wurden. Wenn ihr möchtet, dass der Cron-Job unter dem root -Benutzer ausgeführt wird, könnt ihr den Cron-Job zur root -Crontabelle hinzufügen. Ihr könnt dies tun, indem ihr den Crontab-Editor mit sudo öffnet.
sudo crontab -e

  • (speichern mit strg + O, ENTER und strg + X)
  • das Skript selbst könnt ihr überprüfen, indem ihr es einfach in eurem Terminal aufruft, mit dem Pfad, den ihr bei realpath ermittelt und in den crontab geschrieben habt:
  • /root/diesencontainerupdaten.sh
  • nun solltet ihr das gleiche sehen als hättet ihr die Befehle des Skripts direkt im Terminal ausgegeben
  • wenn also alle Updates und gegebenenfalls auch Upgrades durchgelaufen sind, sollte am Ende noch „Reboot required“ oder eben „No reboot required“ stehen und sich der Server gegebenenfalls neustarten

Das Intervall könnt ihr natürlich seltener oder öfter ausführen, je nachdem, wie aktuell euer Server sein sollte. Achtet darauf, dass der Server im Idealfall nicht mit Backups oder anderen Aufgaben interferiert, sodass sich der Server nicht währenddessen neustartet und wichtige Aufgaben abbricht und so eventuell euren Eingriff nach einem Neustart benötigt.

Ich habe den Teil mit der Prüfung auf einen Neustart persönlich in den ganzen VMs/Containern weggelassen, da ist er eigentlich nur nötig, wenn ihr nicht sowieso den ganzen Server neustarten wollt.
Bei Proxmox selber mache ich das aber mit dem Neustart, denn dieser ist wichtig, nach einem Kernelupdate.

Ihr könntet auch nach jedem Update einfach neustarten, in dem ihr in euer Skript schreibt:
apt update && apt upgrade -y && reboot

Allerdings vermeide ich das lieber, da es nat. viel länger dauert, lauter ist, mehr Strom verbraucht, etc.
Da der Linux Kernel aber recht häufig aktualisiert wird, kann es sein, dass euer Server sowieso bei einer wöchentlichen Planung des Skripts jedes Mal neustartet.

1 „Gefällt mir“