X-Git-Url: https://piware.de/gitweb/?p=bin.git;a=blobdiff_plain;f=backup;h=2f820ec566f593b87c006e614cfbbc9c5173580a;hp=db4faaa5a5d10b9bbd17609497ace3f9ada02455;hb=2519aec669d57a9e9d8947a74036eda6ed12e9a2;hpb=8edab755cf5e3476ccfdf89044081c07ff3c82a6 diff --git a/backup b/backup index db4faaa..2f820ec 100755 --- a/backup +++ b/backup @@ -1,46 +1,32 @@ -#!/bin/sh -e - -# call rsnapshot daily/weekly/monthly regularly -# this should be called from cron very often (several times a day) to not miss -# a cycle when the machine is powered down for extended times. -# -# Author: Martin Pitt -# License: Public Domain - -backupdir=`grep ^snapshot_root ~/.rsnapshotrc | awk '{print $2}'` - -now=`date +%s` - -get_age() { - if [ -e $backupdir/$1 ]; then - age=$(($now - `stat -c %Y $backupdir/$1`)) - else - unset age +#!/bin/sh +set -eu +cd $HOME +LOG=.cache/duplicity/log +PATH=$PATH:/sbin:/usr/sbin + +# do backup every day +if [ -e "$LOG" ] && [ $(( `date +%s` - `stat -c %Y $LOG` )) -lt 86300 ]; then + exit 0 +fi + +# figure out $DISPLAY when running from cron +export DISPLAY="${DISPLAY:-:0}" + +if ! ip route | grep -q '^default.*wl'; then + notify-send "Backup skipped, not on WLAN" + exit 0 +fi + +# figure out ssh agent when running from cron +if [ -z "${SSH_AUTH_SOCK:-}" ]; then + ssh_socket=$(ls /run/user/`id -u`/keyring*/ssh 2>/dev/null) + if [ -S "$ssh_socket" ]; then + export SSH_AUTH_SOCK="$ssh_socket" fi -} - -# abort if last backup was less than a day ago -get_age daily.0 -[ -n "$age" ] && [ $age -lt 86300 ] && exit 0 - -print '------------1---------------' -# monthly backup if last monthly is older than a month (if it doesn't exist, -# check oldest weekly) -get_age monthly.0 -[ -n "$age" ] || get_age weekly.3 -[ -n "$age" ] && [ $age -ge 2591900 ] && mode=monthly - -# weekly backup if last weekly is older than a week (if it doesn't exist, -# check oldest daily) -get_age weekly.0 -[ -n "$age" ] || get_age daily.6 -[ -n "$age" ] && [ $age -ge 604700 ] && mode=weekly - -# default to daily -[ -n "$mode" ] || mode=daily +fi -# call rsnapshot -echo mode: $mode -#notify-send "$mode backup started" || : -rsnapshot -c ~/.rsnapshotrc $mode -#notify-send "$mode backup finished" || : +notify-send "Backup started" +mkdir -p $(dirname $LOG) +env PASSPHRASE="$(cat ~/.backup-passphrase)" duplicity --allow-source-mismatch --full-if-older-than 1M --exclude-filelist .duplicity-ignore . rsync://piware.de/backup/donald >> $LOG || { notify-send "BACKUP FAILED!"; exit 1; } +notify-send "Backup finished successfully" +duplicity remove-all-but-n-full 6 --force rsync://piware.de/backup/donald