X-Git-Url: https://piware.de/gitweb/?p=bin.git;a=blobdiff_plain;f=backup;fp=backup;h=0f16d58dc778ecce1d8d3bbe228916d3ab7f4e0f;hp=f1ecfd437098fbbda47165f0daf3c8e20f93fd13;hb=440cd71f9afa01857159a5881b513aa7694b8354;hpb=fa6286fdfc140259cdbda6921728d3dad33a5dbe diff --git a/backup b/backup index f1ecfd4..0f16d58 100755 --- a/backup +++ b/backup @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/bin/sh -e # call rsnapshot daily/weekly/monthly regularly # this should be called from cron very often (several times a day) to not miss @@ -7,34 +7,38 @@ # Author: Martin Pitt # License: Public Domain -import os, time, os.path, pwd, subprocess - -user = pwd.getpwuid(os.getuid()).pw_name -rsnapshot_basedir = '/var/backups/' + user -rsnapshot_conffile = os.path.expanduser('~/.rsnapshotrc') -verbose = True - -def days_mod(path): - '''Return the number of days since the last modification of path.''' - - if os.path.exists(path): - return (time.time() - os.stat(path).st_mtime)/86400. - else: - return time.time()/86400. - -def rsnapshot(mode): - argv = ['rsnapshot'] - if verbose: - argv.append('-v') - argv += ['-c', rsnapshot_conffile, mode] - if verbose: - print argv - subprocess.call(argv) - -# daily -if days_mod(os.path.join(rsnapshot_basedir, 'daily.0')) >= 1: - rsnapshot('daily') -elif days_mod(os.path.join(rsnapshot_basedir, 'weekly.0')) >= 7: - rsnapshot('weekly') -elif days_mod(os.path.join(rsnapshot_basedir, 'monthly.0')) >= 30: - rsnapshot('monthly') +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