97 lines
No EOL
2.4 KiB
Bash
97 lines
No EOL
2.4 KiB
Bash
#!/bin/bash
|
|
|
|
if [ ! -e /backups/config ]; then
|
|
echo "Config not found!"
|
|
exit 1
|
|
fi
|
|
|
|
set -a
|
|
source /backups/config
|
|
set +a
|
|
set -e
|
|
|
|
if [ "$DEBUGGING" -eq 1 ]; then
|
|
set -x
|
|
fi
|
|
|
|
# Remove lock:
|
|
remove_lock() {
|
|
rm /tmp/backup.lock
|
|
}
|
|
|
|
# Error Handling:
|
|
error_handling() {
|
|
echo "$(date) -> An error occurred!" >&2
|
|
|
|
if [ "$ENABLE_EMAILS" -eq 1 ]; then
|
|
subject="Backup Error -- $SERVER_NAME"
|
|
body="An error occurred during backup of $SERVER_NAME!\nThe current time is $(date).\nPlease check server logs!"
|
|
if [ "$DEBUGGING" -eq 1 ]; then
|
|
sendemail -f $SMTP_FROM -t $SMTP_RECIPIENT -u "$subject" -s $SMTP_SERVER -m "$body" -xu $SMTP_USER -xp $SMTP_PASSWORD -v -o message-charset=$CHARSET
|
|
else
|
|
sendemail -f $SMTP_FROM -t $SMTP_RECIPIENT -u "$subject" -s $SMTP_SERVER -m "$body" -xu $SMTP_USER -xp $SMTP_PASSWORD -q -o message-charset=$CHARSET
|
|
fi
|
|
echo "$(date) -> Email sent!"
|
|
fi
|
|
remove_lock
|
|
exit 1
|
|
}
|
|
trap "error_handling" ERR
|
|
trap "remove_lock" SIGINT
|
|
|
|
if [ "$TEST_ERROR_HANDLING" -eq 1 ]; then
|
|
error_handling
|
|
exit 1
|
|
fi
|
|
|
|
# Test, then create Lockfile
|
|
if [ -e /tmp/backup.lock ]; then
|
|
echo "Backups are already running! If in error, manually remove the lockfile!"
|
|
exit 1
|
|
fi
|
|
touch /tmp/backup.lock
|
|
|
|
# Backups:
|
|
if [ ! -z "$DATABASES" ]; then
|
|
mkdir -p /backups/databases/
|
|
touch /backups/databases/delete
|
|
rm /backups/databases/*
|
|
|
|
echo "$(date) -> Dumping databases..."
|
|
|
|
for database in "${DATABASES[@]}"; do
|
|
echo "$(date) -> $database"
|
|
sudo -u postgres pg_dump -d "$database" -f /home/tmp/"$database".pgdump
|
|
md5sum /home/tmp/"$database".pgdump > /backups/databases/md5sums
|
|
zstd /home/tmp/"$database".pgdump -o /backups/databases/"$database".pgdump.zst
|
|
rm /home/tmp/"$database".pgdump
|
|
done
|
|
|
|
echo "$(date) -> Dumped!"
|
|
else
|
|
echo "No databases selected! Skipping DB export!"
|
|
fi
|
|
|
|
echo "$(date) -> Uploading..."
|
|
|
|
if [ ! -z "$BACKUP_EXCLUDE" ]; then
|
|
for exclude in "${BACKUP_EXCLUDE[@]}"; do
|
|
exclude_parsed=$exclude_parsed' -e '$exclude
|
|
done
|
|
fi
|
|
|
|
if [ ! "$MAX_SPEED_KILOBYTES_SECOND" -eq 0 ]; then
|
|
speed_parsed='--limit-upload '$(echo $MAX_SPEED_KILOBYTES_SECOND)
|
|
fi
|
|
|
|
restic -r "$S3_BUCKET" backup $BACKUP_LIST $exclude_parsed $speed_parsed
|
|
|
|
echo "$(date) -> Pruning old backups..."
|
|
|
|
restic -r "$S3_BUCKET" forget --keep-hourly $HOURLY --keep-daily $DAILY --keep-monthly $MONTHLY --keep-yearly $YEARLY
|
|
restic -r "$S3_BUCKET" prune
|
|
restic -r "$S3_BUCKET" unlock
|
|
|
|
remove_lock
|
|
|
|
echo "$(date) -> Done!" |