mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-04-18 01:52:20 +00:00
Update notification service
This commit is contained in:
75
scripts/shutdown-notify.sh
Normal file
75
scripts/shutdown-notify.sh
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
# ProxMenux Monitor - Shutdown Notification Script
|
||||
# This script is called by systemd ExecStop before the service terminates.
|
||||
# It sends a shutdown/reboot notification via the running Flask server.
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
CONFIG_DIR="/var/lib/proxmenux"
|
||||
CONFIG_FILE="$CONFIG_DIR/config.json"
|
||||
LOG_FILE="/var/log/proxmenux-shutdown.log"
|
||||
PORT="${PORT:-5000}"
|
||||
|
||||
# Logging function
|
||||
log() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE" 2>/dev/null || true
|
||||
}
|
||||
|
||||
log "=== Shutdown notification script started ==="
|
||||
|
||||
# Determine if this is a reboot or shutdown
|
||||
# Check for systemd targets or runlevel
|
||||
is_reboot=false
|
||||
if systemctl is-active --quiet reboot.target 2>/dev/null; then
|
||||
is_reboot=true
|
||||
log "Detected: reboot.target is active"
|
||||
elif [ -f /run/systemd/shutdown/scheduled ]; then
|
||||
if grep -q "reboot" /run/systemd/shutdown/scheduled 2>/dev/null; then
|
||||
is_reboot=true
|
||||
log "Detected: /run/systemd/shutdown/scheduled contains 'reboot'"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Build the event type and message
|
||||
if [ "$is_reboot" = true ]; then
|
||||
event_type="system_reboot"
|
||||
reason="The system is rebooting."
|
||||
else
|
||||
event_type="system_shutdown"
|
||||
reason="The system is shutting down."
|
||||
fi
|
||||
|
||||
hostname=$(hostname)
|
||||
log "Event type: $event_type, Hostname: $hostname"
|
||||
|
||||
# Try to send notification via internal API endpoint
|
||||
# The Flask server may still be running at this point
|
||||
log "Sending notification to http://127.0.0.1:$PORT/api/internal/shutdown-event"
|
||||
|
||||
response=$(curl -s -w "\n%{http_code}" -X POST "http://127.0.0.1:$PORT/api/internal/shutdown-event" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"event_type\": \"$event_type\", \"hostname\": \"$hostname\", \"reason\": \"$reason\"}" \
|
||||
--max-time 10 2>&1)
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
body=$(echo "$response" | head -n -1)
|
||||
|
||||
log "Response HTTP code: $http_code"
|
||||
log "Response body: $body"
|
||||
|
||||
if [ "$http_code" = "200" ]; then
|
||||
log "Notification sent successfully"
|
||||
else
|
||||
log "WARNING: Notification may have failed (HTTP $http_code)"
|
||||
fi
|
||||
|
||||
# Give the notification a moment to be sent
|
||||
log "Waiting 3 seconds for notification delivery..."
|
||||
sleep 3
|
||||
|
||||
# Now terminate the Flask process
|
||||
# Find the main process and send SIGTERM
|
||||
log "Terminating Flask process..."
|
||||
pkill -TERM -f "flask_server" 2>/dev/null || true
|
||||
|
||||
log "=== Shutdown notification script completed ==="
|
||||
exit 0
|
||||
Reference in New Issue
Block a user