Added V2 of the script
This commit is contained in:
parent
8b645e5edc
commit
8af78dc249
77
V2/ha-backup.sh
Normal file
77
V2/ha-backup.sh
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# Set your Home Assistant SSH credentials
|
||||||
|
HA_SSH_KEY="SSH_PRIVATE_KEY" # Replace with your SSH Private key for HomeAssistant
|
||||||
|
HA_SSH_USER="SSH_USER" # Replace with your HomeAssistant server username (Default is root)
|
||||||
|
HA_SSH_HOST="SSH_HOST_IP_OR_HOSTNAME" # Replace with your HomeAssistant server IP address
|
||||||
|
HA_SSH_PORT="SSH_PORT" # Replace with your HomeAssistant server port
|
||||||
|
|
||||||
|
# Set the backup destination path
|
||||||
|
BACKUP_DEST="BACKUP_FILE_DESTINATION" # Replace with the location for the backup files
|
||||||
|
|
||||||
|
# Set your ntfy topic and URL
|
||||||
|
NTFY_TOPIC="NTFY_TOPIC" # Replace with your ntfy topic
|
||||||
|
NTFY_SERVER="NTFY_SERVER_FQDN_ADDRESS" # Replace with your ntfy server address
|
||||||
|
|
||||||
|
NTFY_URL="$NTFY_SERVER/$NTFY_TOPIC"
|
||||||
|
|
||||||
|
# Timestamp variable for consistent naming
|
||||||
|
TIMESTAMP=$(date '+%Y-%m-%d_%H-%M-%S')
|
||||||
|
|
||||||
|
# Send notification that backup has started
|
||||||
|
curl -X POST -d "Backup process started at $TIMESTAMP" $NTFY_URL
|
||||||
|
|
||||||
|
# Create a backup on the Home Assistant server and extract the slug
|
||||||
|
BACKUP_OUTPUT=$(ssh -i "$HA_SSH_KEY" -p "$HA_SSH_PORT" "$HA_SSH_USER@$HA_SSH_HOST" "ha backup new --name=auto_backup_$TIMESTAMP")
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
# Send notification if backup creation fails
|
||||||
|
curl -X POST -d "Error: Failed to create backup on Home Assistant server." $NTFY_URL
|
||||||
|
echo "Error: Failed to create backup on Home Assistant server."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract the backup slug and strip any carriage return characters
|
||||||
|
BACKUP_SLUG=$(echo "$BACKUP_OUTPUT" | awk '/slug:/ {print $2}' | tr -d '\r')
|
||||||
|
if [ -z "$BACKUP_SLUG" ]; then
|
||||||
|
# Send notification if backup slug extraction fails
|
||||||
|
curl -X POST -d "Error: Failed to extract backup slug." $NTFY_URL
|
||||||
|
echo "Error: Failed to extract backup slug."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Send notification that backup was created
|
||||||
|
curl -X POST -d "Backup created successfully with slug: $BACKUP_SLUG" $NTFY_URL
|
||||||
|
|
||||||
|
# Create a filename for the backup
|
||||||
|
BACKUP_FILE="$BACKUP_DEST/${TIMESTAMP}_${BACKUP_SLUG}.tar"
|
||||||
|
|
||||||
|
# Copy the backup file from Home Assistant to your local machine
|
||||||
|
scp -i "$HA_SSH_KEY" -P "$HA_SSH_PORT" "$HA_SSH_USER@$HA_SSH_HOST:/usr/share/hassio/backup/${BACKUP_SLUG}.tar" "$BACKUP_FILE"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
# Send notification if backup copy fails
|
||||||
|
curl -X POST -d "Error: Failed to copy backup to local machine." $NTFY_URL
|
||||||
|
echo "Error: Failed to copy backup to local machine."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Send notification that backup file was copied successfully
|
||||||
|
curl -X POST -d "Backup file successfully copied to: $BACKUP_FILE" $NTFY_URL
|
||||||
|
|
||||||
|
# Clean up old backups if needed (adjust the number of days to keep)
|
||||||
|
find "$BACKUP_DEST" -name '*.tar' -mtime +90 -exec rm {} \;
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
# Send notification if cleanup fails
|
||||||
|
curl -X POST -d "Error: Failed to clean up old backups." $NTFY_URL
|
||||||
|
echo "Error: Failed to clean up old backups."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Send notification that the cleanup was successful
|
||||||
|
curl -X POST -d "Old backups cleaned up successfully." $NTFY_URL
|
||||||
|
|
||||||
|
# Success message
|
||||||
|
echo "Backup completed successfully: $BACKUP_FILE"
|
||||||
|
# Send notification that the backup was completed
|
||||||
|
curl -X POST -d "Backup completed successfully: $BACKUP_FILE" $NTFY_URL
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user