60 lines
1.6 KiB
Bash
Executable File
60 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
start=$(date +%s)
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
WEBHOOK_URL=$(cat "${SCRIPT_DIR}/.discord")
|
|
DATABASE_PASSWORD=$(cat "${SCRIPT_DIR}/.database")
|
|
|
|
send_discord_message() {
|
|
local message="$1"
|
|
local content="`date +\"%Y/%m/%d-%H:%M:%S\"` - $message"
|
|
curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"$content\"}" "$WEBHOOK_URL"
|
|
}
|
|
|
|
#Enable maintenance mode
|
|
php8.3 /var/www/nextcloud/occ maintenance:mode --on
|
|
if [ $? -ne 0 ]; then
|
|
send_discord_message "Failed to enable maintenance mode."
|
|
exit 1
|
|
fi
|
|
|
|
#Backup nextcloud directory
|
|
echo "Backing up nextcloud directory"
|
|
rsync -Aax /var/www/nextcloud/ /mnt/backup/nextcloud/
|
|
if [ $? -ne 0 ]; then
|
|
send_discord_message "Failed to backup nextcloud directory."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
#Backup database
|
|
TEMP_FILE="/mnt/backup/db_backups/nextcloud-sqlbackup.bak.tmp"
|
|
FINAL_FILE="/mnt/backup/db_backups/nextcloud-sqlbackup.bak"
|
|
echo "Backing up database"
|
|
export MYSQL_PWD="$DATABASE_PASSWORD"
|
|
mysqldump --single-transaction --no-tablespaces -h localhost -u cloud_db nextcloud > "$TEMP_FILE"
|
|
if [ $? -ne 0 ]; then
|
|
send_discord_message "Failed to backup database."
|
|
exit 1
|
|
fi
|
|
mv "$TEMP_FILE" "$FINAL_FILE"
|
|
|
|
#Backup data directory
|
|
echo "Backing up data directory"
|
|
rsync -Aax /mnt/cloud/ /mnt/backup/data/
|
|
if [ $? -ne 0 ]; then
|
|
send_discord_message "Failed to backup data directory."
|
|
exit 1
|
|
fi
|
|
|
|
#Disable maintenance mode
|
|
php8.3 /var/www/nextcloud/occ maintenance:mode --off
|
|
if [ $? -ne 0 ]; then
|
|
send_discord_message "Failed to disable maintenance mode."
|
|
fi
|
|
|
|
end=$(date +%s)
|
|
elapsed=$((end - start))
|
|
send_discord_message "SUCCESS! Finished Nextcloud backup in $elapsed seconds."
|