#!/bin/bash files=("/etc/nginx" "/etc/wireguard" "/etc/matrix-synapse" "/opt") names=() DBs=("synapse") now=$(date +"%s") week_day=$(date +"%A") dir="/mnt/backups" backup_dir="${dir}/${now}" remoteUser="foxbackup" localUser="foxbackup" localPostgreUser="postgres" host="42.42.42.3" port=2244 if [ $UID != "0" ]; then echo "You must run it as sudo." exit 1 fi remoteExecuce() { sudo -iu $localUser ssh -p $port $remoteUser@$host "$*" } log() { echo "[$(date)] $*" >> ./autobackup_log.txt echo "[$(date)] $*" } backupDb() { sudo -iu $localPostgreUser pg_dump -Fc "$1" | sudo -iu $localUser ssh -p $port $remoteUser@$host "pv > \"${backup_dir}/${1}.dump\"" } backupDir() { tar cpf - "${2}" | sudo -iu $localUser ssh -p $port $remoteUser@$host "pv > \"${backup_dir}/${1}.tar\"" } startBackup() { log "#===#Starting backup#===#" #if [[ $week_day == "Sunday" ]]; then # backup_dir="${dir}/${now}_full" # files+=("/var/www") # DBs+=("peertube_prod") #fi remoteExecuce mkdir -p "${backup_dir}" for name in ${files[@]}; do IFS="/" temp="${name}" read -rasplitIFS<<< "${temp}" len=${#splitIFS[@]} names+=(${splitIFS[$len-1]}) IFS='' done length=${#files[@]} i=0 while [ $i -lt $length ]; do log "Backing up dir ${files[$i]}" echo $i backupDir ${names[$i]} ${files[$i]} i=$(( $i + 1 )) done for db in ${DBs[@]}; do log "Backing up DB ${db}" backupDb ${db} done log "All is backed up, cleaning up old backups and finishing" remoteExecuce "${dir}/autobackup.sh" log "All is done." } startBackup #====how to restore====# #pg_restore -d postgres --clean --create "file backup"