Ich zeige, wie du den PBS per Wake-on-LAN (WoL) startest und ein Bash-Skript einrichtest, das den Server nach Abschluss aller im Hintergrund laufenden Jobs automatisch herunterfährt.
Die Aktivierung von Wake-on-LAN unterscheidet sich je nach Mainboard und Hersteller.
Dieser Teil ist sehr herstellerspezifisch, daher kann ich ihn hier nicht allgemein abbilden.
Hinweis: Häufiges Starten und Herunterfahren bei laufenden Festplatten ist für HDDs nicht unbedingt gesund. Setze die Automatisierung daher mit Bedacht ein.
Arbeitsweise: Vor jedem auf dem PVE gestarteten Backup wird ein Hook-Skript ausgeführt. Es sendet ein WoL-Paket an den PBS und wartet anschließend 5 Minuten (Timeout), damit der PBS hochfahren kann. Danach startet der reguläre Backup-Job. Auf der PBS-Seite wird der Server automatisch heruntergefahren, sobald keine Jobs mehr laufen.
Einrichtung auf der PBS-Seite:
Zuerst muss das Paket wakeonlan installiert werden, um den Backup-Server aufzuwecken
sudo apt update && sudo apt install wakeonlanÖffne die Netzwerkkonfigurationsdatei mit z.B. nano
sudo nano /etc/network/interfacesFüge die folgende Zeile hinzu, um Wake-on-LAN für das Netzwerkinterface zu aktivieren
post-up /sbin/ethtool -s $IFACE wol gBeispielkonfiguration
Hier ein Beispiel für eine vollständige Netzwerkkonfiguration
auto lo
iface lo inet loopback
allow-hotplug eno1
iface eno1 inet manual
address 192.168.1.10/24
gateway 192.168.1.254
post-up /sbin/ethtool -s $IFACE wol gNachdem die Konfiguration angepasst wurde, starte den Netzwerkdienst neu, damit die Änderungen übernommen werden.
sudo systemctl restart networkingAuto-Shutdown-Skript erstellen
sudo nano /usr/local/bin/pbs-auto-shutdown.shSkriptinhalt einfügen
Ein Skript, das auf dem PBS laufende Jobs – einschließlich Garbage-Collection und Verification – erkennt und den Server nach Abschluss aller Tasks automatisch herunterfährt.
#!/bin/bash
# /usr/local/sbin/pbs-wait-and-shutdown.sh
# Die Wartezeit bis die eigentliche Schleife augeführt wird.
sleep 3600
# Wiederholt jede 300 Sekunden die Prüfung und fährt sofort runter, sobald kein Job mehr läuft.
INTERVAL=300
while true; do
# JSON-Array laufender Tasks abfragen
JOB_JSON=$(sudo proxmox-backup-manager task list --output-format json 2>/dev/null)
# Leerraum entfernen
JOB_JSON_NOSPACE=$(echo "$JOB_JSON" | tr -d '[:space:]')
if [[ "$JOB_JSON_NOSPACE" == "[]" ]]; then
echo "$(date): Keine aktiven PBS-Jobs mehr – starte Shutdown."
sudo systemctl poweroff
exit 0
else
echo "$(date): PBS-Jobs aktiv, warte $INTERVAL s..."
fi
sleep $INTERVAL
doneSkript ausführbar machen
sudo chmod +x /usr/local/bin/pbs-auto-shutdown.shCron-Job für das automatische Herunterfahren einrichten
Crontab öffnen
sudo crontab -eFüge die folgende Zeile am Ende der Crontab ein
Danach muss der PBS einmal neu gestartet werden, damit der Cronjob aktiv wird.
@reboot /usr/local/bin/pbs-auto-shutdown.sh >> /dev/null 2>&1Einrichtung auf der PVE-Seite:
Erstellen eines Hook-Skripts
Dieses Hook-Skript wird benötigt, um den PBS vom PVE aus automatisch per WoL zu starten. Das bedeutet: Sobald der PVE mit dem Backup beginnt, wird zuerst dieses Skript ausgeführt und startet den
PBS mit einer Vorlaufzeit von 5 Minuten.
sudo nano /usr/local/bin/vzdump-hook-script.shSkriptinhalt einfügen und anpassen
Füge den folgenden Code in die Datei ein und passe MAC- und IP-Adresse des PBS entsprechend an
#!/bin/bash
# MAC-Adresse des Backup-Servers
MAC="A8:A1:59:DB:64:25"
# IP-Adresse des Backup-Servers
HOST="192.168.1.20"
case "$1" in
job-init)
echo "$(date) - Sende Wake-on-LAN an $MAC..."
/usr/bin/wakeonlan $MAC
echo "$(date) - Warte 5 Minuten, damit der Backup-Server hochfahren kann..."
sleep 300 # 5 Minuten Wartezeit
echo "$(date) - Fortfahren mit dem Backup."
;;
esacSkript ausführbar machen
Nach dem Speichern muss das Skript ausführbar gemacht werden
sudo chmod +x /usr/local/bin/vzdump-hook-script.shEinbinden des Hook-Skripts
Das Hook-Skript muss nun in die vzdump.conf eingebunden werden. Dadurch wird das Skript bei jedem Backup-Job ausgeführt, der auf dem PVE gestartet wird.
sudo nano /etc/vzdump.confFüge die folgende Zeile am Ende ein
script: /usr/local/bin/vzdump-hook-script.sh
Schreibe einen Kommentar