Benutzer-Werkzeuge

Webseiten-Werkzeuge


Automatisches Server-Backup

Anforderung

Wird print2forms in geschäftskritischen Abläufen eingesetzt, ist es unumgänglich, Sicherungskopien vom aktuellen Stand der print2forms-Installation zu erstellen.

Da bei der Konzeption von print2forms dafür gesorgt wurde, dass alle Daten auf dem print2forms-Server abgelegt werden, ist es ausreichend, wenn das p2fRoot-Verzeichnis des Servers gesichert wird.

Dieses Verzeichnis ist im laufenden Betrieb nicht sicher zu kopieren, weil von verschiedenen Komponenten des print2forms-Systems jederzeit schreibend auf den Server zugegriffen werden kann. Es ist also notwendig, den Server-Dienst anzuhalten, bevor die Kopie des p2fRoot-Verzeichnisses erstellt wird, um Abbrüche des Kopiervorgangs oder inkonsistente Kopien zu vermeiden.

Realisierung

Um das Anlegen einer Sicherungskopie zu vereinfachen, gibt es im Kontrollfeld des print2forms-Servers einen Reiter, der die Konfiguration einer automatischen Sicherung erlaubt.

Da der Server die Sicherung selbst anstösst, kann er dafuer sorgen, dass für die Dauer der Sicherung ein konsistenter Stand des p2fRoot-Verzeichnisses vorgefunden wird. Erreicht wird dies, indem schreibende Anfragen während der Sicherung verzögert werden. Die Sicherung erfolgt daher praktisch ohne Betriebsunterbrechung, muss also nicht mit irgendeinem Wartungsfenster synchronisiert werden.

Im Eingabefeld Sicherungsverzeichnis kann über einen Klick auf die Schaltfläche Auswahl… ein Verzeichnis selektiert werden, in das die Sicherungskopien des Servers abgelegt werden sollen.

Im Eingabefeld Kommandozeile wird das für die Durchführung der Sicherung Kommando angegeben - beispielsweise "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -F "C:\Users\Public\Documents\SPE Systemhaus GmbH\print2forms\p2fScript\Backup.ps1", wobei die Pfade gegebenenfalls an die jeweilige Installation anzupassen sind.

Der Zeitpunkt der Sicherung wird durch die Angaben im unteren Teil des Konfigurationsdialogs festgelegt. In der Abbildung wird jeden Sonntag um 02:00 Uhr (Lokalzeit des Rechners, auf dem der Server ausgeführt wird) die Kommandozeile ausgeführt.


Der Server kopiert so schnell wie möglich zunächst das gesamte p2fRoot-Verzeichnis in das im Konfigurationsdialog angegebene Backup-Verzeichnis, damit Verzögerungen im Ablauf auf ein Minimum reduziert werden. Anschliessend wird ein von Anwender vorzugebendes Kommando ausgeführt.

Nachfolgend ist beispielhaft ein PowerShell-Skript Backup.ps1 abgebildet, das lediglich das gesicherte p2fRoot-Verzeichnis in ein Zip-Archiv packt.

Im ersten Teil des Skriptes ist zu sehen, welche Parameter vom print2forms-Server an das Skript übergeben werden.

fBackup.ps1
<#
.SYNOPSIS
Used in automatic p2fServer backup processing
 
#>
 
param(
	## Kind of call: OK, ERROR
	[Parameter(Mandatory = $true, Position = 0)] 
	[string]$Kind,
 
	## Last p2fRoot change time: 2016-08-10 12:43:17
	[Parameter(Mandatory = $true, Position = 1)] 
	[string]$LastChange,
 
	## Last backup time: 2016-08-10 12:43:17
	[Parameter(Mandatory = $true, Position = 2)] 
	[string]$LastBackup,
 
	## Path to backup folder: "C:\tmp\p2f\Backup\p2fRoot-16-08-24T14-41"
	[Parameter(Position = 3)] 
	[string]$BackupPath
)
 
Set-StrictMode -Version 3
 
Write-EventLog -LogName Application -Source p2fServer -Category 0 -EntryType Information -EventId 5000 -Message "Backup script called"
 
 
# V5 Compress-Archive -Path C:\Stuff -DestinationPath archive.zip
function ZipFiles($zipfilename, $sourcedir )
{
   Add-Type -Assembly System.IO.Compression.FileSystem
   $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
   [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,
        $zipfilename, $compressionLevel, $false)
}
 
# continue on ok only
If ($Kind -ne "OK")
{
	exit 1
}
 
$ZipFileName = $BackupPath + ".zip"
 
if ((Test-Path -Path $ZipFileName -PathType Leaf))
{
	Write-EventLog -LogName Application -Source p2fServer -Category 0 -EntryType error -EventId 5000 -Message "Zip file already exist"
	exit 2
}
 
$p2fError = $false
If (Test-Path -Path $BackupPath)
{
    Try
	{
		ZipFiles -zipfilename $ZipFileName -sourcedir $BackupPath
	}
	Catch
	{
		Write-EventLog -LogName Application -Source p2fServer -Category 0 -EntryType error -EventId 5000 -Message "Error on zip backup folder"
		$p2fError = $true
	}
}
 
# remove backup folder
If (! $p2fError)
{
	Try
	{
		Remove-Item -Recurse -ErrorAction stop $BackupPath
	}
	Catch
	{
		Write-EventLog -LogName Application -Source p2fServer -Category 0 -EntryType error -EventId 5000 -Message "Error on removing " + $BackupPath
	}
}
 
exit 0



Hinweise

  • Das vorgestellte Skript setzt die Verfügbarkeit von PowerShell in der Version 3 voraus.
  • Mit Hilfe der vom print2forms-Server beim Aufruf des Kommandos mit übergebenen Zeiten, kann gegebenenfalls ermittelt werden, ob eine Sicherung überhaupt notwendig ist.
print2forms/tips/tip67.txt · Zuletzt geändert: 2018-08-31 08:07 (Externe Bearbeitung)

Seiten-Werkzeuge