Skip to content

Instantly share code, notes, and snippets.

@mbierman
Last active May 1, 2025 10:14
Show Gist options
  • Save mbierman/30d19343d5533f660bd143d7aee17213 to your computer and use it in GitHub Desktop.
Save mbierman/30d19343d5533f660bd143d7aee17213 to your computer and use it in GitHub Desktop.
a macOS shutdown script
#!/bin/bash
shutdown_now () {
logger "UPS Script: Sending IFTTT power_off event."
if ! curl -s -X POST https://maker.ifttt.com/trigger/...; then
logger "UPS Script: IFTTT notification failed."
fi
sleep 4
logger "UPS Script: Initiating shutdown."
if ! /sbin/shutdown -h +0; then
logger "UPS Script: Shutdown command failed."
exit 1
fi
}
pause_nut () {
logger "UPS Script: Stopping NUT (via Homebrew)."
if ! brew services stop nut; then
logger "UPS Script: Failed to stop NUT service."
fi
}
resume_nut () {
logger "UPS Script: Starting NUT (via Homebrew)."
if ! brew services start nut; then
logger "UPS Script: Failed to start NUT service."
fi
}
# Show dialog with 20-second timeout
response=$(osascript <<'EOF'
try
with timeout of 20 seconds
display dialog "UPS: Power failure detected. Shut down?" buttons {"Cancel", "O.K."} default button "O.K." with icon caution
return button returned of result
end timeout
on error errMsg number errNum
if errNum = -128 then
return "Cancel"
else
return "Timeout"
end if
end try
EOF
)
logger "UPS Script: Dialog returned: '$response'"
# Handle result
case "$response" in
"O.K.")
logger "UPS Script: User confirmed shutdown."
shutdown_now
;;
"Cancel")
logger "UPS Script: Shutdown canceled by user."
exit 0
;;
"Timeout")
logger "UPS Script: No user response. Proceeding with shutdown."
shutdown_now
;;
*)
logger "UPS Script: Unexpected response. Canceling shutdown for safety."
exit 0
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment