#!/usr/bin/env python import os import sys import glob import datetime def main(): dst = "/home/vpri/backup" remain = 7 today_dir = dst + "/backup-today" last_dir = dst + "/backup-" + datetime.date.today().isoformat() # last_dir = dst + "/backup-" + datetime.datetime.now().isoformat() # Use this line when testing print "\n*** Backup Started ***" shell("date") make_today_dir(today_dir, last_dir) # comment out when quick testing backup(today_dir) cleanup(dst, remain) # comment out when quick testing def shell(command): print "$ " + command sys.stdout.flush() os.system(command) def make_today_dir(today_dir, last_dir): if os.path.isdir(today_dir): if shell ("time cp -al %s/ %s/" % (today_dir, last_dir)): raise "Backup copy failed." else: os.mkdir(today_dir) def backup(today_dir): """Backup web space on tinlizzie server""" if shell ("rsync -avzessh --delete vpri@tinlizzie.org:/var/www/tinlizzie/ %s/www/" % today_dir): raise "Backup failed." """Backup home directories""" if shell ("rsync -avzessh --delete vpri@tinlizzie.org:/home/ %s/home/" % today_dir): raise "Backup failed." """Backup subversion space on tinlizzie server""" if shell ("ssh vpri@tinlizzie.org 'svnadmin dump -q /var/www/tinlizzie/svn/' > %s/var.www.tinlizzie.svn.dump" % today_dir): raise "Backup failed." if shell ("ssh vpri@tinlizzie.org 'svnadmin dump -q /var/www/tinlizzie/public-repository/' > %s/var.www.tinlizzie.public-repository.dump" % today_dir): raise "Backup failed." if shell ("ssh vpri@tinlizzie.org 'svnadmin dump -q /var/www/tinlizzie/repository/' > %s/var.www.tinlizzie.repository.dump" % today_dir): raise "Backup failed." def cleanup(dir_name, n): """Remain up to n old directories and cleanup other files""" backup_dirs = glob.glob(dir_name + "/backup-????-??-??") backup_dirs.sort() backup_dirs.reverse() while (len(backup_dirs) > n): unnecessary = backup_dirs.pop() if shell ("rm -rf %s " % unnecessary): raise "Cleanup failed" main()