I wrote a simple subversion backup script that runs on my hosting provider, webfaction, and backs up my subversion repository. I have this script running in cron and sending periodic backups to gmail. However, it should work on any unix based system with python, gzip, and subversion. Simply set the SMTP settings (configured in the webfaction panel if you have webfaction), your email information and the path to subversion and run the script.
This script requires python 2.5 or 2.6. It will require modification under python 2.4.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
!/usr/bin/env python2.6 import os import smtplib import time import mimetypes from datetime import datetime # python 2.5/2.6 is required because the email library changed after 2.4 from email import encoders from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase # SMTP settings SMTPUSER = 'YOURSMTPUSERNAME' SMTPPASS = 'YOURSMTPPASSOWRD' SMTPSERVER = 'smtp.webfaction.com' SMTPPORT = 25 # who to address the email to and from TO = 'YOUREMAIL@EXAMPLE.com' FROM = 'backups@webfaction.com' # svn location SVN_LOCATION = 'PATH_TO_SVN_DIR' # these probably do not need to be changed SVN_BACKUP_FILE = 'svn.dump' GZIP_BACKUP_FILE = SVN_BACKUP_FILE + '.gz' BACKUP_LOCATION = '/tmp/'+SVN_BACKUP_FILE ZIPPED_BACKUP = BACKUP_LOCATION+'.gz' BACKUP_CMD = 'svnadmin dump '+SVN_LOCATION+' > ' + BACKUP_LOCATION GZIP_CMD = 'gzip -f '+BACKUP_LOCATION print '*******************************************************' print '** Backing up repository' print '*******************************************************' os.system(BACKUP_CMD) print '*******************************************************' print '** Zipping backup' print '*******************************************************' os.system(GZIP_CMD) print '*******************************************************' print '** Emailing backup' print '*******************************************************' msg = MIMEMultipart() msg['Subject'] = 'Subversion Backup '+str(datetime.now()) msg['From'] = FROM msg['To'] = list().append(TO) msg.preample = 'Should not see this in a MIME-aware mail reader.\n' # add the gzipped attachment fp = open(ZIPPED_BACKUP, 'rb') att = MIMEBase('application', 'gzip') att.set_payload(fp.read()) encoders.encode_base64(att) att.add_header('Content-Disposition', 'attachment', filename=GZIP_BACKUP_FILE) fp.close() msg.attach(att) # Send the email via our own SMTP server. s = smtplib.SMTP(SMTPSERVER, SMTPPORT) s.ehlo() s.starttls() s.ehlo() s.login(SMTPUSER, SMTPPASS) s.sendmail(FROM, TO, msg.as_string()) s.quit() # removing backup os.remove(ZIPPED_BACKUP) |
In order to use gmail’s smtp server, change your settings like so:
1 2 3 4 |
SMTPUSER = 'YOURGMAILUSERNAME' SMTPPASS = 'YOURGMAILPASSOWRD' SMTPSERVER = 'smtp.gmail.com' SMTPPORT = 587 # note the port change! |