Backup-scripts in Python
Uit SlowTrainWiki
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))
