Proxmox WOL für LXC und VM

Begonnen von steffen83, 19 April 2023, 08:41:39

Vorheriges Thema - Nächstes Thema

steffen83

Hallo zusammen,

ich möchte gerne ein Script mit euch teilen, worüber ihr ein LXC oder eine VM in Proxmox per WOL starten könnt.

Was muss gemacht werden? Das script muss auf der PVE liegen und bei jedem Start ausgeführt werden. Das geht wie folgt:
crontab -e in die Console eintragen und @reboot /root/wol.sh hinzufügen. Pfad zur Datei natürlich anpassen.
Das Script wird somit nach jedem Neustart gestartet.
Beim Absetzen eines WOL von irgendeiner Maschine (auch von einem LXC oder VM) wird die MAC Adresse überprüft ob diese einem LXC oder VM zugeordnet ist. Anschließend wird diese Maschine gestartet. Zusätzlich habe ich mir noch eine Meldung per Telegram eingebaut, welche mir über FHEM die Meldung ausgibt.

wol.sh
#!/bin/bash
re='^[0-9]+$'
while true ; do
    echo "\n" | nc -knl -p 9 -u | # listen to udp port 9 for packets, check if it is a magic packet
        stdbuf -o0 xxd -c 6 -p |
        stdbuf -o0 uniq |
        stdbuf -o0 grep -v 'ffffffffffff' |
        while read ; do
            macWOL="${REPLY:0:2}:${REPLY:2:2}:${REPLY:4:2}:${REPLY:6:2}:${REPLY:8:2}:${REPLY:10:2}"
            macWOL=`echo "$macWOL" |tr "[:upper:]" "[:lower:]"`     
            /usr/sbin/qm list  |tr -s ' ' | cut -d ' ' -f 2 | while read -r id ; do
                if [[ $id =~ $re ]] ; then
                    echo  "check QEMU VM-ID $id for $macWOL"
                    /usr/sbin/qm config $id | grep ^net0 | while read -r macstr ; do
                        macstr=`echo "$macstr" |tr "[:upper:]" "[:lower:]"`
                        if [[ $macstr == *"$macWOL"* ]]; then
                            echo "MAC $macWOL found at QEMU VMID  $id. Starting VM"
                            start=$(/usr/sbin/qm start $id 2>&1) ; echo "set TelegramBot _msg VM $id wird gestartet\n$start" | telnet 192.168.0.10 7072
                        fi
                    done
                fi
            done

            /usr/sbin/pct list  |tr -s ' ' | cut -d ' ' -f 1 | while read -r id ; do
                if [[ $id =~ $re ]] ; then
                    echo  "check LXC VM-ID $id for $macWOL"
                    /usr/sbin/pct config $id | grep ^net0 | while read -r macstr ; do
                        macstr=`echo "$macstr" |tr "[:upper:]" "[:lower:]"`
                        if [[ $macstr == *"$macWOL"* ]]; then
                            echo "MAC $macWOL found at LXC VMID  $id. Starting VM"
                            start=$(/usr/sbin/pct start $id 2>&1) ; echo "set TelegramBot _msg LXC $id wird gestartet\n$start" | telnet 192.168.0.10 7072
                        fi
                    done
                fi
            done
        done
    done
done

Viel Spaß damit.

Gruß
Steffen
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

CoolTux

So etwas am besten unter FHEM - Hardware -> Server - Linux veröffentlichen.
Du kannst den Thread gerne dahin verschieben.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net