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

Bash
sudo apt update && sudo apt install wakeonlan

Öffne die Netzwerkkonfigurationsdatei mit z.B. nano

Bash
sudo nano /etc/network/interfaces

Füge die folgende Zeile hinzu, um Wake-on-LAN für das Netzwerkinterface zu aktivieren

Bash
post-up /sbin/ethtool -s $IFACE wol g

Beispielkonfiguration
Hier ein Beispiel für eine vollständige Netzwerkkonfiguration

Bash
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 g

Nachdem die Konfiguration angepasst wurde, starte den Netzwerkdienst neu, damit die Änderungen übernommen werden.

Bash
sudo systemctl restart networking

Auto-Shutdown-Skript erstellen

Bash
sudo nano /usr/local/bin/pbs-auto-shutdown.sh

Skriptinhalt 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.

Bash
#!/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
done

Skript ausführbar machen

Bash
sudo chmod +x /usr/local/bin/pbs-auto-shutdown.sh

Cron-Job für das automatische Herunterfahren einrichten

Crontab öffnen

Bash
sudo crontab -e

Füge die folgende Zeile am Ende der Crontab ein
Danach muss der PBS einmal neu gestartet werden, damit der Cronjob aktiv wird.

Bash
@reboot /usr/local/bin/pbs-auto-shutdown.sh >> /dev/null 2>&1

Einrichtung 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.

Bash
sudo nano /usr/local/bin/vzdump-hook-script.sh

Skriptinhalt einfügen und anpassen
Füge den folgenden Code in die Datei ein und passe MAC- und IP-Adresse des PBS entsprechend an

Bash
#!/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."
        ;;
esac

Skript ausführbar machen
Nach dem Speichern muss das Skript ausführbar gemacht werden

Bash
sudo chmod +x /usr/local/bin/vzdump-hook-script.sh

Einbinden 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.

Bash
sudo nano /etc/vzdump.conf

Füge die folgende Zeile am Ende ein

Bash
script: /usr/local/bin/vzdump-hook-script.sh