<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Python_Backup_Script</id>
	<title>Python Backup Script - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Python_Backup_Script"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Python_Backup_Script&amp;action=history"/>
	<updated>2026-06-29T18:02:14Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Python_Backup_Script&amp;diff=19738&amp;oldid=prev</id>
		<title>Terry.dailey am 4. Dezember 2019 um 14:12 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Python_Backup_Script&amp;diff=19738&amp;oldid=prev"/>
		<updated>2019-12-04T14:12:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 4. Dezember 2019, 14:12 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Mit diesem Script startet man ein automatisiertes Backup.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/usr/bin/python&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/usr/bin/python&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff::1.12:old-19724:rev-19738 --&gt;
&lt;/table&gt;</summary>
		<author><name>Terry.dailey</name></author>
	</entry>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Python_Backup_Script&amp;diff=19724&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „&lt;syntaxhighlight&gt; #!/usr/bin/python import sys import re import os import datetime import paramiko import getopt  class mandant_class(object):  def __init__(se…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Python_Backup_Script&amp;diff=19724&amp;oldid=prev"/>
		<updated>2019-12-04T13:28:32Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&amp;lt;syntaxhighlight&amp;gt; #!/usr/bin/python import sys import re import os import datetime import paramiko import getopt  class mandant_class(object):  def __init__(se…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
import sys&lt;br /&gt;
import re&lt;br /&gt;
import os&lt;br /&gt;
import datetime&lt;br /&gt;
import paramiko&lt;br /&gt;
import getopt&lt;br /&gt;
&lt;br /&gt;
class mandant_class(object):&lt;br /&gt;
 def __init__(self,man,bdir,ldir,cdir):&lt;br /&gt;
   self.man = man&lt;br /&gt;
   self.cdir = cdir&lt;br /&gt;
   self.datei = self.cdir + self.man + &amp;quot;.cfg&amp;quot;&lt;br /&gt;
   self.bdir = bdir&lt;br /&gt;
   self.ldir = ldir&lt;br /&gt;
&lt;br /&gt;
 def try_open(self):&lt;br /&gt;
   if os.path.exists(self.datei):&lt;br /&gt;
     self.dat = open(self.datei,&amp;quot;r&amp;quot;)&lt;br /&gt;
     self.dat_open = True&lt;br /&gt;
     return True&lt;br /&gt;
   else:&lt;br /&gt;
     self.dat_open = False&lt;br /&gt;
     return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 def computer(self):&lt;br /&gt;
  self.dat.seek(0)&lt;br /&gt;
  comp_array = []&lt;br /&gt;
  for line in self.dat:&lt;br /&gt;
     compi,dirs = line.split(&amp;quot;:&amp;quot;)&lt;br /&gt;
     comp_array.append(compi)&lt;br /&gt;
  return comp_array&lt;br /&gt;
&lt;br /&gt;
 def dirs(self,comp):&lt;br /&gt;
   self.dat.seek(0)&lt;br /&gt;
   return_value = &amp;quot;&amp;quot;&lt;br /&gt;
   for zeile in self.dat:&lt;br /&gt;
     line = zeile.rstrip()&lt;br /&gt;
     pattern = re.match(comp,line)&lt;br /&gt;
     if pattern:&lt;br /&gt;
         compi,dirs = line.split(&amp;quot;:&amp;quot;)&lt;br /&gt;
         dir_array = dirs.split(&amp;quot;;&amp;quot;)&lt;br /&gt;
         return_value = dir_array&lt;br /&gt;
   return return_value&lt;br /&gt;
&lt;br /&gt;
 def today(self):&lt;br /&gt;
    today = datetime.date.today()&lt;br /&gt;
    str_today = str(today)&lt;br /&gt;
    return str_today&lt;br /&gt;
&lt;br /&gt;
 def source(self,r,v):&lt;br /&gt;
    src =  r + &amp;quot;:&amp;quot; + v + &amp;quot;/ &amp;quot;&lt;br /&gt;
    return src&lt;br /&gt;
&lt;br /&gt;
 def dest(self,r,v):&lt;br /&gt;
    mod_y = v.replace(&amp;quot;/&amp;quot;,&amp;quot;-&amp;quot;)&lt;br /&gt;
    mod_v = mod_y[1:]&lt;br /&gt;
    dst =  self.bdir + self.man + &amp;quot;/&amp;quot; + r + &amp;quot;/&amp;quot; + self.today() + &amp;quot;/&amp;quot; + mod_v&lt;br /&gt;
    if not os.path.isdir(dst):&lt;br /&gt;
      os.makedirs(dst)&lt;br /&gt;
    return dst&lt;br /&gt;
&lt;br /&gt;
 def log(self,r,v):&lt;br /&gt;
    mod_y = v.replace(&amp;quot;/&amp;quot;,&amp;quot;-&amp;quot;)&lt;br /&gt;
    mod_v = mod_y[1:]&lt;br /&gt;
    manlogdir = self.ldir + &amp;quot;/&amp;quot; + self.man  + &amp;quot;/&amp;quot; + r + &amp;quot;/&amp;quot; + mod_v + &amp;quot;/&amp;quot;&lt;br /&gt;
    if not os.path.isdir(manlogdir):&lt;br /&gt;
      os.makedirs(manlogdir)&lt;br /&gt;
    return  manlogdir + self.today()&lt;br /&gt;
&lt;br /&gt;
 def ssh_check(self,r):&lt;br /&gt;
    client = paramiko.SSHClient()&lt;br /&gt;
    client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))&lt;br /&gt;
    try:&lt;br /&gt;
      client.connect(r, username=&amp;quot;root&amp;quot;,port=&amp;quot;8472&amp;quot;)&lt;br /&gt;
      return True&lt;br /&gt;
    except Exception, e:&lt;br /&gt;
      return False&lt;br /&gt;
&lt;br /&gt;
 def backup_dirs(self,r):&lt;br /&gt;
    for verzeichnis in self.dirs(r):&lt;br /&gt;
      if self.ssh_check(r):&lt;br /&gt;
        cmd = &amp;quot;rsync -azx &amp;quot; + self.source(r,verzeichnis) + self.dest(r,verzeichnis) + &amp;quot; &amp;gt; &amp;quot; + self.log(r,verzeichnis) + &amp;quot;.0&amp;quot;&lt;br /&gt;
      else:&lt;br /&gt;
        cmd = &amp;quot;echo ssh error &amp;gt; &amp;quot; + self.log(r,verzeichnis) + &amp;quot;.1&amp;quot;&lt;br /&gt;
      print cmd&lt;br /&gt;
      os.system(cmd)&lt;br /&gt;
&lt;br /&gt;
 def list_dirs(self,r):&lt;br /&gt;
    for verzeichnis in self.dirs(r):&lt;br /&gt;
        cmd = self.source(r,verzeichnis)&lt;br /&gt;
        print cmd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 def backup_mandant(self):&lt;br /&gt;
  for rechner in self.computer():&lt;br /&gt;
     self.backup_dirs(rechner)&lt;br /&gt;
&lt;br /&gt;
 def __del__(self):&lt;br /&gt;
  if self.dat_open:&lt;br /&gt;
     self.dat.close()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
options, mandant = getopt.getopt(sys.argv[1:], 'r:l:' )&lt;br /&gt;
if len(mandant) == 0:&lt;br /&gt;
  print sys.argv[0] + &amp;quot; (-r rechner|-l rechner)  mandant&amp;quot;&lt;br /&gt;
else:&lt;br /&gt;
  configdir = &amp;quot;/share/backup/config/&amp;quot;&lt;br /&gt;
  configfile = configdir + mandant[0] + &amp;quot;.cfg&amp;quot;&lt;br /&gt;
  backupdir  = &amp;quot;/share/backup/&amp;quot;&lt;br /&gt;
  logdir = &amp;quot;/var/log/backup&amp;quot;&lt;br /&gt;
  x = mandant_class(mandant[0],backupdir,logdir,configdir)&lt;br /&gt;
  if x.try_open():&lt;br /&gt;
    if  len(options) == 0:&lt;br /&gt;
      x.backup_mandant()&lt;br /&gt;
    else:&lt;br /&gt;
      for opt, arg in options:&lt;br /&gt;
        if opt in ('-r'):&lt;br /&gt;
          rechner = arg&lt;br /&gt;
          x.backup_dirs(rechner)&lt;br /&gt;
        elif opt in ('-l'):&lt;br /&gt;
          rechner = arg&lt;br /&gt;
          x.list_dirs(rechner)&lt;br /&gt;
  else:&lt;br /&gt;
   print &amp;quot;can't open mandant file&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>