#!/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 # 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')