[Eisfair] HowTo: eisfair-Server per WOL starten

Peter Bäumer peter at baeumer.duckdns.org
Do Jul 4 20:05:22 CEST 2024


Am 04.07.2024 um 13:39 schrieb Marcus Röckrath:
> Hallo,
> 
> da ich eine widerspenstige Onboard-Realtek-Netzwerkkarte habe, die nach
> jedem Boot WOL wieder deaktiviert, habe ich mal ein HowTo verfasst:
> 
> https://www.eisfair.org/doku.php?id=eisfair:hilfe:howtos:allgemeines:server_mittels_wol_starten
> 
Da hab ich auch so eine NIC im Rechner und hatte mir was zusammen gegoogelt...

Die Service Unit hat bei mir ein @ im Namen,
beim Aufrufen der Unit wird zwischen @ und dem Punkt der Name der NIC geschrieben.
In der Unit wird dann anstelle vom %i der Name der NIC verwendet.

Kann also für mehrere NIC's benutzt werden, ohne das für jede NIC ein eigene Unit angelegt werden müsste...


wol_nic at .service
----------------------------------------------------------------------------------------------------
[Unit]
Description=Set g to %i
DefaultDependencies=no
Before=shutdown.target
After=network-online.target multi-user.target
Requires=network-online.target

[Service]
StandardOutput=journal+console
StandardError=journal+console
Type=oneshot
ExecStart=/usr/sbin/ethtool %i
ExecStop=/usr/sbin/ethtool -s %i wol g

[Install]
WantedBy=reboot.target halt.target poweroff.target multi-user.target
----------------------------------------------------------------------------------------------------

saturn # systemctl status wol_nic at eth[TAB]
wol_nic at eth0.service  wol_nic at eth1.service  wol_nic at eth2.service

saturn # systemctl status wol_nic at eth0.servicewol_nic at eth0.service - Set g to eth0
      Loaded: loaded (/usr/lib/systemd/system/wol_nic at .service; enabled; preset: disabled)
      Active: inactive (dead) since Thu 2024-07-04 19:18:54 CEST; 5min ago
    Main PID: 957 (code=exited, status=0/SUCCESS)
         CPU: 8ms

Jul 04 19:18:54 saturn ethtool[957]:         Duplex: Full
Jul 04 19:18:54 saturn ethtool[957]:         Auto-negotiation: on
Jul 04 19:18:54 saturn ethtool[957]:         Port: MII
Jul 04 19:18:54 saturn ethtool[957]:         PHYAD: 1
Jul 04 19:18:54 saturn ethtool[957]:         Transceiver: internal
Jul 04 19:18:54 saturn ethtool[957]:         Supports Wake-on: g
Jul 04 19:18:54 saturn ethtool[957]:         Wake-on: d
Jul 04 19:18:54 saturn ethtool[957]:         Link detected: yes
Jul 04 19:18:54 saturn systemd[1]: wol_nic at eth0.service: Deactivated successfully.
Jul 04 19:18:54 saturn systemd[1]: Finished Set g to eth0.


saturn # /usr/sbin/ethtool eth0
Settings for eth0:
         Supported ports: [ MII ]
         Supported link modes:   10baseT/Half 10baseT/Full
                                 100baseT/Half 100baseT/Full
                                 1000baseT/Full
         Supported pause frame use: No
         Supports auto-negotiation: Yes
         Supported FEC modes: Not reported
         Advertised link modes:  10baseT/Half 10baseT/Full
                                 100baseT/Half 100baseT/Full
                                 1000baseT/Full
         Advertised pause frame use: No
         Advertised auto-negotiation: Yes
         Advertised FEC modes: Not reported
         Speed: 1000Mb/s
         Duplex: Full
         Auto-negotiation: on
         Port: MII
         PHYAD: 1
         Transceiver: internal
         Supports Wake-on: g
         Wake-on: g
         Link detected: yes


----------------------------------------------------------------------------------------------------

Hab mir ein Skript geschrieben um einen von meinen Servern per WOL direkt oder später per at job zu starten.
Ist nicht das schönste Skript, mach aber was es soll ;)

----------------------------------------------------------------------------------------------------
#!/bin/bash

ETHER_WAKE_BIN='/usr/sbin/ether-wake'

MAC_SERVER1=("00:11:22:33:44:55")
MAC_SERVER2=("00:11:22:33:44:55")
MAC_SERVER3=("00:11:22:33:44:55")
MAC_SERVER4=("00:11:22:33:44:55")
MAC_SERVER5=("00:11:22:33:44:55" "00:11:22:33:44:55" "00:11:22:33:44:55" )
MAC_SERVER6=("00:11:22:33:44:55" "00:11:22:33:44:55" "00:11:22:33:44:55")

function zeige_at_jobs {
     clrhome
     for JOB_NUMMER in $(atq|sort -k6,6n -k3,3M -k4,4n -k5,5n|awk '{print $1}')
     do
         JOB_A="$(at -l ${JOB_NUMMER})"
         JOB_B="$(at -c ${JOB_NUMMER} | tail -n2 | head -n1)"
         echo "${JOB_A} --> ${JOB_B}"
     done
     read -p "Enter for next " WEITER
}


while true #[ -z "${SERVER_NUMMER}" ]
do
     clrhome
     echo "1  SERVER1"
     echo "2  SERVER2"
     echo "3  SERVER3"
     echo "4  SERVER4"
     echo "5  SERVER5"
     echo "6  SERVER6"
     echo "j = Ausgabe der Jobliste:"
     echo "e = exit"
     echo

     read -p "Welcher Server soll gestartet werden: " SERVER_NUMMER

     case ${SERVER_NUMMER} in

         1)  SERVER_NAME="SERVER1"     ;;
         2)  SERVER_NAME="SERVER2"     ;;
         3)  SERVER_NAME="SERVER3"     ;;
         4)  SERVER_NAME="SERVER4"     ;;
         5)  SERVER_NAME="SERVER5"     ;;
         6)  SERVER_NAME="SERVER5"     ;;
         j)  zeige_at_jobs             ;;
         e|E) exit 0                   ;;
         *)
             SERVER_NUMMER=''
             continue
         ;;
     esac


while [[ "${SERVER_NUMMER}" =~ [123456] ]]
do
     #[[ "${WANN_NUMMER}" =~ [] ]]
     clrhome
     echo "1 Jetzt"
     echo "2 Später"
     echo "z = zurück"
     echo "e = exit"

     read -p "Wann soll der Server ${SERVER_NAME} gestartet werden: " WANN_NUMMER

     case ${WANN_NUMMER} in
         1|JETZT)
             eval MAC_LISTE=\${MAC_${SERVER_NAME}[@]}
             for MAC in ${MAC_LISTE}
             do
                 ${ETHER_WAKE_BIN} -i eth0 ${MAC}
                 echo "${ETHER_WAKE_BIN} -i eth0 ${MAC}"
             done
             sleep .5
             break
         ;;

         2|SPAETER)
             while [ -z "${DATUM}" -o -z "${UHRZEIT}" ]
             do
                 clrhome
                 read -p "An welchem Tag soll der Server ${SERVER_NAME} gestartet werden              [dd.mm.yyyy]: " DATUM
                 read -p "Um wieviel Uhr soll der Server ${SERVER_NAME} am ${DATUM} gestartet werden     [HH:MM]: " UHRZEIT
                 eval MAC=\${MAC_${SERVER_NAME}[1]}
                 echo "${ETHER_WAKE_BIN} -i eth0 ${MAC}" | at ${UHRZEIT} ${DATUM}
                 if [ "$?" = "0" ];then
                     echo
                     echo "Ausgabe der Jobliste:"
                     zeige_at_jobs
                     break
                 else
                     echo "Keinen at Job hinzugefügt! "
                     break
                 fi
             done
         ;;

         z|Z)
             break
         ;;
         e|E)
             exit 0
         ;;
     esac
done
     SERVER_NUMMER=''
done
----------------------------------------------------------------------------------------------------




Mehr Informationen über die Mailingliste Eisfair