バックアップスクリプトを改造した
昨日のエントリで晒したバックアップスクリプトを少し改造してみた。
スクリプト
#!/usr/bin/env python import os import popen2 import datetime SVNROOT = '/var/www/svn' BACKUPROOT = '/backup' TODAY = datetime.date.today().isoformat() def dobackup(abspath): if not issvnrepos(abspath): return destdir = getdestdir(True) destrepos = os.path.join(destdir, os.path.split(abspath)[1]) hotcopy_cmd = '/usr/bin/svnadmin hotcopy %(abspath)s %(destrepos)s' % locals() doexec(hotcopy_cmd) def doexec(command): stdout_and_err, stdin = popen2.popen4(command) for line in stdout_and_err: print line, def issvnrepos(abspath): formatpath = os.path.join(abspath, 'format') if not os.path.isfile(formatpath): return False return True def getdestdir(makeifnotexist=False): dest = os.path.join(BACKUPROOT, TODAY) if not os.path.isdir(dest) and makeifnotexist: os.mkdir(dest) return dest def cleanup(): today = TODAY os.chdir(BACKUPROOT) tar_cmd = '/bin/tar jcf %(today)s.tar.bz %(today)s/' % locals() doexec(tar_cmd) rm_cmd = '/bin/rm -rf %(today)s/' % locals() doexec(rm_cmd) def main(): for entry in os.listdir(SVNROOT): dobackup(os.path.join(SVNROOT, entry)) cleanup() if __name__ == '__main__': main()
追記(2009/03/08 13:58)
svnadmin のコマンド部分がテストコードになっていたので、修正しました。