]> piware.de Git - bin.git/commitdiff
add backup
authorMartin Pitt <martin.pitt@ubuntu.com>
Mon, 6 Aug 2007 20:58:52 +0000 (22:58 +0200)
committerMartin Pitt <martin.pitt@ubuntu.com>
Mon, 6 Aug 2007 20:58:52 +0000 (22:58 +0200)
backup [new file with mode: 0755]

diff --git a/backup b/backup
new file mode 100755 (executable)
index 0000000..f1ecfd4
--- /dev/null
+++ b/backup
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+
+# 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 <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')