Backup Python Script
Zur Navigation springen
Zur Suche springen
#!/usr/bin/python import sys import re import os import datetime import paramiko import getopt class mandant_class(object): def __init__(self,man,bdir,ldir,cdir): self.man = man self.cdir = cdir self.datei = self.cdir + self.man + ".cfg" self.bdir = bdir self.ldir = ldir def try_open(self): if os.path.exists(self.datei): self.dat = open(self.datei,"r") self.dat_open = True return True else: self.dat_open = False return False def computer(self): self.dat.seek(0) comp_array = [] for line in self.dat: compi,dirs = line.split(":") comp_array.append(compi) return comp_array def dirs(self,comp): self.dat.seek(0) return_value = "" for zeile in self.dat: line = zeile.rstrip() pattern = re.match(comp,line) if pattern: compi,dirs = line.split(":") dir_array = dirs.split(";") return_value = dir_array return return_value def today(self): today = datetime.date.today() str_today = str(today) return str_today def source(self,r,v): src = r + ":" + v + "/ " return src def dest(self,r,v): mod_y = v.replace("/","-") mod_v = mod_y[1:] dst = self.bdir + self.man + "/" + r + "/" + self.today() + "/" + mod_v if not os.path.isdir(dst): os.makedirs(dst) return dst def log(self,r,v): mod_y = v.replace("/","-") mod_v = mod_y[1:] manlogdir = self.ldir + "/" + self.man + "/" + r + "/" + mod_v + "/" if not os.path.isdir(manlogdir): os.makedirs(manlogdir) return manlogdir + self.today() def ssh_check(self,r): client = paramiko.SSHClient() client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts')) try: client.connect(r, username="root",port="8472") return True except Exception, e: return False def backup_dirs(self,r): for verzeichnis in self.dirs(r): if self.ssh_check(r): cmd = "rsync -azx " + self.source(r,verzeichnis) + self.dest(r,verzeichnis) + " > " + self.log(r,verzeichnis) + ".0" else: cmd = "echo ssh error > " + self.log(r,verzeichnis) + ".1" print cmd #os.system(cmd) def list_dirs(self,r): for verzeichnis in self.dirs(r): cmd = self.source(r,verzeichnis) print cmd def backup_mandant(self): for rechner in self.computer(): self.backup_dirs(rechner) def __del__(self): if self.dat_open: self.dat.close() options, mandant = getopt.getopt(sys.argv[1:], 'r:l:' ) if len(mandant) == 0: print sys.argv[0] + " (-r rechner|-l rechner) mandant" else: configdir = "/share/backup/config/" configfile = configdir + mandant[0] + ".cfg" backupdir = "/share/backup/" logdir = "/var/log/backup" x = mandant_class(mandant[0],backupdir,logdir,configdir) if x.try_open(): if len(options) == 0: x.backup_mandant() else: for opt, arg in options: if opt in ('-r'): rechner = arg x.backup_dirs(rechner) elif opt in ('-l'): rechner = arg x.list_dirs(rechner) else: print "can't open mandant file"