Backup-scripts in Python

Uit SlowTrainWiki

Ga naar: navigatie, zoeken

Zie Robocopy en Python voor gerelateerde informatie.

Inhoud

Openstaande issues

  • Als je Outlook afsluit met kill, raakt Outlook mogelijk beschadigd.Da's niet handig
  • Je kunt niet makkelijk zien of een backup succesvol is verlopen

Simpele niet-automatische backup

Dit betreft backup op een externe harde schijf. De gebruiker wordt gevraagd om het device-letter van deze externe harde schijf in te voeren. Het script maakt gebruik van Robocopy voor het daadwerkelijke copieren.

import os
from subprocess import Popen, PIPE
from subprocess import call
 
print ("Welkom bij EyeGlass, routine voor dagelijks backuppen")
print ("\n")
backupdevice=input("Wat is de device-letter van de externe harde schijf? ")
print ("\n")
string1='robocopy "d:\\Mijn documenten" "'
string3=':\\Mijn documenten" /s /R:0'

executestring=string1+backupdevice+string3

print ("Nu wordt uitgevoerd: ",executestring)

resultaat=call((executestring))

Let op:

  • Backslashes moeten un-escaped worden
  • Je hebt allerlei libraries nodig, als is niet duidelijk welke precies
  • De laatste tekens in string1 zijn: " "'

Backup ahv. dag van de week

Dit script is bedoeld om aangeroepen te worden door Task Scheduler. Vervolgens bepaalt het de dag van de week, en maakt een backup in de bijbehorende map. En passant wordt Outlook be-eindigd, omdat je .pst-bestanden niet zomaar kunt backuppen. Let op: Dit script gaat er altijd van uit dat backups op device I gemaakt worden.

import os
from subprocess import Popen, PIPE
from subprocess import call
from datetime import date
 
# Welkom

print ('*** Welkom bij EyeGlass, routine voor backups')

# Initieer variabelen

source='"C:\\Users\\JanKlaas"'
options='/s /R:0' 

# Outlook afsluiten

killstring='taskkill /f /im OUTLOOK.EXE'
print ('   Outlook wordt nu afgesloten...')
# call(killstring)

# Bepaal target ahv. dag-van-de-week

if date.isoweekday(date.today())==1:
   print('   Het is maandag')
   target='I:\\Maandag'
elif date.isoweekday(date.today())==2:
   print ('   Het is dinsdag')
   target='I:\\Dinsdag'
elif date.isoweekday(date.today())==3:
   print ('   Het is woensdag')
   target='I:\\Woensdag'
elif date.isoweekday(date.today())==4:
   print ('   Het is donderdag')
   target='I:\\Donderdag'
elif date.isoweekday(date.today())==5:
   print ('   Het is vrijdag')
   target='I:\\Vrijdag'
elif date.isoweekday(date.today())==6:
   print ('   Het is zaterdag')
   target='I:\\Zaterdag'
elif date.isoweekday(date.today())==7:
   print ('   Het is zonderdag')
   target='I:\\Zondag'    
else:
   print('   Lukt niet om de dag van de week te bepalen')

# Creer uiteindelijke string

executestring='robocopy '+source+' '+target+' '+options

print ('   Uit te voeren commando: ',executestring)

resultaat=call((executestring))

print ('  Resultaat: ',resultaat)
print ('\n')
print ('   Klaar.')
input ('  Geef Enter om af te sluiten.')

Automatiser backup ahv. dag van de week

In dit geval moet het backup-script in de root van het backup-medium staan, want dan heb je gelijk de goede working directory. Daardoor hoeft het script niet om de doel-device-letter te vragen!

print ("Welkom bij EyeGlass, routine voor dagelijks backuppen")
print ("\n")

string1='robocopy "c:\\Documents and Settings" '

# Bepaal target ahv. dag-van-de-week

if date.isoweekday(date.today())==1:
   print('   Het is maandag')
   target='.\\Maandag'
elif date.isoweekday(date.today())==2:
   print ('   Het is dinsdag')
   target='.\\Dinsdag'
elif date.isoweekday(date.today())==3:
   print ('   Het is woensdag')
   target='.\\Woensdag'
elif date.isoweekday(date.today())==4:
   print ('   Het is donderdag')
   target='.\\Donderdag'
elif date.isoweekday(date.today())==5:
   print ('   Het is vrijdag')
   target='.\\Vrijdag'
elif date.isoweekday(date.today())==6:
   print ('   Het is zaterdag')
   target='.\\Zaterdag'
elif date.isoweekday(date.today())==7:
   print ('   Het is zonderdag')
   target='.\\Zondag'    
else:
   print('   Lukt niet om de dag van de week te bepalen')

string3=' /s /R:0'

executestring=string1 + target + string3

print ("Nu wordt uitgevoerd: ",executestring)

resultaat=call((executestring))

Backup ahv. de dag van de maand

Als hierboven, maar nu met een aparte map voor elke dag van de maand

import os
from subprocess import Popen, PIPE
from subprocess import call
import datetime
#
# Welcome to De Vliegende Backup,
# a routine for daily backup, made as simple as possible.
#
# Publiced under GNU Public Licence
# Jeroen Strompf - September 2010
# Slow Train Coming
 
# Welcome
#
print ('*** De Vliegende Backup ***')

################
# Define command
################
#
CommandString='robocopy '

###############
# Define source
###############
#
Source='"C:\\Documents and Settings"'

####################
# Define destination
####################
#
NumberOfToday=str(datetime.datetime.now().day);

Destination='.\\' + NumberOfToday

# print (NumberOfToday);
# print (destination);

################
# Define options
################
#
Options=' /s /R:0'

#####################
# Define whole string
#####################
#
ExecuteString=CommandString + Source + ' ' + Destination + Options

print (ExecuteString);

#########
# Execute
#########
#
Result=call((ExecuteString))
Persoonlijke instellingen