#!/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."