Updates

Änderungsstand: 2023-09-30

Ich verwende dafür ein kleines Script, welches ein Update für das Betriebssystem und die Docker erledigt. Ich muss bedenken, dass ALLE Docker, von denen sich in Dockervolumes die Scripte befinden, gestoppt, geupdated und gestartet werden, auch wenn diese nicht relevant sind. Soll heißen, dass die Compose-Files von Dockern, die keine Verwendung mehr haben oder momentan nicht benötigt werden, nicht im Verzeichnis /home/dockervolumes sein sollten. Dieses Script ist für alle in diesen Guides erstellten Docker. Als Bonus kann man in einem Logfile schauen, wann das letzte Update mit diesem Script getätigt wurde.

Im Terminal als root anmelden:

sudo su
touch /home/updatelog.txt && echo // Updates mit "updatescript"  | tee -a /home/updatelog.txt
cd && mkdir -p scriptfiles
cd && cd scriptfiles && nano updatescript.sh

Folgendes eintragen und ggnf. anpassen:

#!/bin/bash
# Automatisches Update ALLER Docker der Docker-Compose-Scriptfiles: /home/dockervolumes/*
# Dateipfad: ~/scriptfiles/updatescript.sh
# Logfile: /home/updatelog.txt

sudo apt-get update && sudo apt-get upgrade -y

cd /home/dockervolumes

readarray -d '' composeConfigs < <(find . -type f -name docker-compose.y* -print0)

for cfg in "${composeConfigs[@]}"; do
#  sudo docker compose -f "$cfg" stop
  sudo docker compose -f "$cfg" pull
  sudo docker compose -f "$cfg" up -d
done

# Alte Images automatisch löschen
sudo docker image prune -f
#
## Logfile Eintrag (wenn nicht benötigt, dann # davor setzen)
echo d=$(date +%y-%m-%d_%H:%M:%S) | sudo tee -a /home/updatelog.txt
#

Strg-x, y, Enter

sudo chmod 700 updatescript.sh

Zum Aufruf des Scriptes folgenden Befehl eingeben:

sudo ./updatescript.sh

Es werden alle Docker, von denen sich die *.yml im Verzeichnis „/home/dockervolumes/“ vorhanden sind, geupdatet und die alten Images gelöscht.

Ich stoppe in diesem Script, bei meiner eigenen Verwendung, automatisch, vor der Aktualisierung der Docker, vorsichtshalber den Nextcloud-Docker, da sich dort die Datenbank mit drin befindet und diese demzufolge ebenfalls gestoppt wird. Dies dient zur Sicherheit, um einen Crash oder Datenverlust vorzubeugen, falls bei der Aktualisierung im selben Moment darauf geschrieben werden sollte. Nur interessant, wenn eine separate Datenbank betrieben wird. Und das ist hier der Fall. Also Zeile 8 und Zeile 9 und bei Bedarf auch die Zeilen 11 & Zeile 12, indem die ## entfernt werden. Die Docker starten nach Ablauf des Scriptes automatisch.

Unter /home/updatelog.txt kann man den Zeitpunkt der Updates einsehen. Mein erster Eintrag sieht folgendermaßen aus:

// Updates mit updatescript
d=23-08-06_23:48:43

Strg-x zum Beenden.

exit

Cronjob für die automatische Aktualisierung einrichten:

Möchte man das Script täglich durchlaufen lassen, dann hilft folgendes (immer noch als root angemeldet):

sudo crontab -e

Folgendes am Ende der Datei einfügen (das Hashtag am Ende nicht vergessen):

0 2 * * * ~/scriptfiles/updatescript.sh >/dev/null 2>&1
#

STGR-x, y, Enter

Jetzt wird täglich 02:00 Uhr das Update-Script gestartet.

Täglich 02:10 Uhr wäre dann:

10 2 * * * ~/scriptfiles/updatescript.sh >/dev/null 2>&1
#

STGR-x, y, Enter

Möchte man nur einmal pro Woche am Montag updaten, dann:

0 5 * * 1 ~/scriptfiles/updatescript.sh >/dev/null 2>&1
#

STGR-x, y, Enter

Oder nur am 1. des Monats um 05:00 Uhr:

0 5 1 * * ~/scriptfiles/updatescript.sh >/dev/null 2>&1
#

STGR-x, y, Enter

sudo reboot

Quelle: https://wiki.ubuntuusers.de/Cron/

Erstelle eine Website wie diese mit WordPress.com
Jetzt starten