• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Erweitertes upsshutdown Script funktioniert nicht

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
Hallo,
ich hab seit kurzem eine APC USV an meinem iMac. Diese wird auch ordentlich erkannt.
Da ich aber auch noch ein Synology NAS habe, dachte ich mir ich passe einfach /usr/libexec/upsshutdown an, um das NAS herunterzufahren.

Code:
#!/bin/sh
#
# Pick up the email recipient from /etc/hostconfig, if defined.
#
#. /etc/hostconfig
#
# Initialize...
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
SI_PATH=/System/Library/StartupItems
MAIL=mail
MSG="Shutting down due to power loss!"

logger -i -p daemon.emerg -t UPS "${MSG}"

#
# Send notification to the same address used for IP Failover.
#
if ! [ "${FAILOVER_EMAIL_RECIPIENT:=-AUTOMATIC-}" = "-AUTOMATIC-" ] ; then

        SUBJECT="UPS Notification: ${MSG}"

        ${MAIL} -s "${SUBJECT}" ${FAILOVER_EMAIL_RECIPIENT} < /dev/null

fi

# Take the NAS down.

ssh [email protected] poweroff &> /dev/null

# Take the system down.
#
if [[ -n $1 && "WaitForUPS" == $1 ]] ; then
   #
   # Wait for UPS to take the system down abruptly and unexpectedly.
   #
   shutdown -hu now "${MSG}"
else
   #
   # Gently shutdown the system immediately.
   #
   shutdown -h now "${MSG}"
fi

Den Befehl ssh [email protected] poweroff &> /dev/null habe ich manuell getestet und dieser funktioniert auch.
Nun habe ich den USV Shutdown "simuliert", in dem ich mit sudo /usr/libexec/upsshutdown das Script manuell ausgeführt habe. Der iMac fuhr auch herunter, aber das NAS nicht.

Ich habe ehrlich gesagt keine Ahnung, weshalb es nicht funktioniert. ssh auf das NAS funktioniert mit Public Key, daher auch keine Übergabe des Passworts. Der Remote-Befehl kommt vor dem if/else Block und sollte daher immer ausgeführt werden.
 
Ich denke es ist sowieso sinnvoll launchd zu verwenden.

Code:
touch /Users/Shared/logoutHook.sh
sudo chmod +x /Users/Shared/logoutHook.sh

Code:
#!/bin/bash
ssh [email protected] poweroff &> /dev/null

Code:
sudo defaults write com.apple.loginwindow LogoutHook /Users/Shared/logoutHook.sh


Ich habe das zwar selbst noch nie so eingerichtet, aber ich hoffe das klappt bei dir! Es sieht zumindest nach einer sauberen Lösung aus, siehe die Quelle.
 
Ich denke es ist sowieso sinnvoll launchd zu verwenden.

Code:
touch /Users/Shared/logoutHook.sh
sudo chmod +x /Users/Shared/logoutHook.sh

Code:
#!/bin/bash
ssh [email protected] poweroff &> /dev/null

Code:
sudo defaults write com.apple.loginwindow LogoutHook /Users/Shared/logoutHook.sh


Ich habe das zwar selbst noch nie so eingerichtet, aber ich hoffe das klappt bei dir! Es sieht zumindest nach einer sauberen Lösung aus, siehe die Quelle.
Mein Script hat die ganze Zeit funktioniert. Problem lag an der Fritzbox, die kann keine Jumbo Frames. Wieso dann nicht alle Pakete verworfen wurden, ist mir unklar. iMac und NAS direkt am Switch der Jumbo Frames unterstützt angeschlossen und schon klappt's.

Das "Problem" an deiner Lösung wäre, soweit ich das herausgelesen habe, dass dieser Hook bei jedem Reboot bzw. Shutdown ausgeführt wird. Ich möchte aber das NAS nur herunterfahren, wenn der Shutdown von der USV getriggert wurde ;)
Normale Reboots oder Shutdowns sollen das NAS nicht herunterfahren.