#!/usr/bin/env zsh # author: Daniel Sommer # license: MIT # check if we're running in a subshell, forbid direct execution [[ "$ZSH_EVAL_CONTEXT" == "toplevel" ]] && printf "error: direct execution of this script is forbidden!\n" >&2 && exit 1 # get the "home" directory home="$(dirname $(realpath "$0"))" # check if .env file exists and source it env="$home/$(hostname).env" [[ ! -r "$env" ]] && printf "error: config file '"$env"' does not exist!\n" >&2 && exit 1 source "$env" # check if backup directories are defined [[ -z "$RESTIC_DIRECTORIES" ]] && printf "error: config file '"$env"' does not define any backup directories!\n" >&2 && exit 1 printf ">> starting restic backup to repository '"$RESTIC_REPOSITORY"'...\n" # execute "pre" action if defined [[ -n "$RESTIC_BACKUP_PRE" ]] && eval "$RESTIC_BACKUP_PRE" for directory in ${RESTIC_DIRECTORIES[@]}; do seconds="$SECONDS" printf "\n> backing up '"$directory"'...\n" sudo --preserve-env -u "$RESTIC_USER" restic backup --verbose --no-scan --retry-lock 3h --no-cache "$directory" printf "> backup of '"$directory"' finished after "$(( $SECONDS - $seconds ))" seconds!\n" done # execute "post" action if defined [[ -n "$RESTIC_BACKUP_POST" ]] && eval "$RESTIC_BACKUP_POST" printf "\n>> restic backup finished after "$SECONDS" seconds!\n"