]> piware.de Git - bin.git/commitdiff
rewrite backup script in shell and with fixed weekly/monthly logic
authormartin@piware.de <>
Sun, 8 Nov 2009 17:38:34 +0000 (18:38 +0100)
committermartin@piware.de <>
Sun, 8 Nov 2009 17:38:34 +0000 (18:38 +0100)
backup

diff --git a/backup b/backup
index f1ecfd437098fbbda47165f0daf3c8e20f93fd13..0f16d58dc778ecce1d8d3bbe228916d3ab7f4e0f 100755 (executable)
--- 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 <martin@piware.de>
 # 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