Backup Python Script: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „<pre> #!/usr/bin/python import sys import re import os import datetime import paramiko mandant = sys.argv[1] configdir = "/share/backup/config/" configfile = c…“)
 
 
Zeile 6: Zeile 6:
 
import datetime
 
import datetime
 
import paramiko
 
import paramiko
mandant = sys.argv[1]
+
import getopt
configdir = "/share/backup/config/"
 
configfile = configdir + mandant + ".cfg"
 
backupdir  = "/share/backup/"
 
logdir = "/var/log/backup"
 
  
 
class mandant_class(object):
 
class mandant_class(object):
Zeile 17: Zeile 13:
 
   self.cdir = cdir
 
   self.cdir = cdir
 
   self.datei = self.cdir + self.man + ".cfg"
 
   self.datei = self.cdir + self.man + ".cfg"
  self.dat = open(self.datei,"r")
 
 
   self.bdir = bdir
 
   self.bdir = bdir
 
   self.ldir = ldir
 
   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):
 
  def computer(self):
Zeile 47: Zeile 52:
  
 
  def source(self,r,v):
 
  def source(self,r,v):
     src = "rsync -azx " + r + ":" + v + "/ "
+
     src = r + ":" + v + "/ "
 
     return src
 
     return src
  
Zeile 75: Zeile 80:
 
       return False
 
       return False
  
def __del__(self):
+
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()
 
     self.dat.close()
  
x = mandant_class(mandant,backupdir,logdir,configdir)
 
  
for rechner in x.computer():
+
 
   for verzeichnis in x.dirs(rechner):
+
options, mandant = getopt.getopt(sys.argv[1:], 'r:l:' )
    if x.ssh_check(rechner):
+
if len(mandant) == 0:
      cmd = x.source(rechner,verzeichnis) + x.dest(rechner,verzeichnis) + " > " + x.log(rechner,verzeichnis) + ".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:
 
     else:
       cmd = "echo ssh error > " + x.log(rechner,verzeichnis) + ".1"
+
       for opt, arg in options:
    print cmd
+
        if opt in ('-r'):
    os.system(cmd)
+
          rechner = arg
 +
          x.backup_dirs(rechner)
 +
        elif opt in ('-l'):
 +
          rechner = arg
 +
          x.list_dirs(rechner)
 +
  else:
 +
  print "can't open mandant file"
 
</pre>
 
</pre>

Aktuelle Version vom 16. Dezember 2017, 09:08 Uhr

#!/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"