[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.service
○ wol_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