#!/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 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 # call rsnapshot echo mode: $mode rsnapshot -c ~/.rsnapshotrc $mode