Webseiten aktuell halten mit dem mirror Skript und rsync

Page content

Das mirror-Skript ist ein mächtiges Perl Skipt, mit dem man lokale und entfernte Verzeichnisse miteinander abgleichen kann. Im Unterschied zu rsync beherrscht mirror das FTP Protokoll.

Installation

Das mirror-Skript kann bei OpenSuse mittels Yast einfach installiert werden.

Konfiguration

Bei OpenSuse legt die Installation die Dokumentation lokal unter /file:///usr/share/doc/packages/mirror/ ab. Dort steht die komplette Befehlsreferenz. Obwohl das Mirror-Skript normalerweise verwendet wird, um entfernte Sites lokal zur Verfügung zu stellen, funktioniert es auch umgekehrt. Man muss sich ein passende mirror.defaults-File schrieben. Für das Synchronisieren einer Homepage aus den lokalen Dateien sieht das mirror.defaults-File in etwas wie folgt aus:

package=meineWebSite get_file=false

Keep all local_dirs relative to here

local_dir=/home/dennis/web/stage site=ftp.meinprovider.de remote_dir=/
remote_user=... remote_password=...

create files with these access rights

file_mode=0644 local_ignore=(.svn$|tmpl_level|incubator)
do_deletes=true delete_excl=(logs)

“local_ignore” beschreibt Pattern von Dateien/Verzeichnissen, die nicht transferiert werden sollen. “do_deletes=true” erlaubt das Löschen von Dateien auf dem entfernten Server, die lokal nicht vorhanden sind. “delete_excl” erlaubt es, Pattern von Dateien/Verzeichnissen anzugeben, die nicht auf Löschung geprüft/nicht gelöscht werden dürfen. Ich möchte beispielsweise das auf dem Server vorhandene Verzeichnis “logs” erhalten.

Aufruf

Mittels mirror -n mirror.defaults kann man sehen, was mirror tun würde. Wenn das passt, kann man mittels mirror mirror.defaults die Synchronisierung starten.

Mirror kann noch viel viel mehr, siehe dazu Referenzseiten.

Synchronisation mit rsync

Das mirror-Skript ist für remote Synchronisation gedacht. Lokal geht das noch einfacher mittels rsync. rsync ist ein sehr mächtiges Werkzeug zur INKREMENTELLEN Synchronisation ganzer Plattenkomplexe. Mittels rsync -Cavz /mnt/var/lib/vmware/Virtual Machines/* . kann man beispielsweise alle seine virtuellen Maschinen von einer Platte auf eine andere sichern. Dabei werden nur die veränderten Dateien kopiert.

rsync beherrscht verschiedene Transfer-Protokolle, unter anderem auch ssh. Somit kann man eine Synchronisation auch über einen ssh-Kanal durchführen. Das kann soweit ich gesehen habe, mirror nicht.

rsync --delete -avz -e ssh * user@host.somedomain.com:/var/web/files

synchronisiert so alle lokalen Verzeichnisse ("*") auf host.somedomain.com.

Interessante Optionen:

–delete: löscht im Ziel Dateien, die in der Quelle nicht mehr existieren. Ohne diese Option bleiben diese Dateien im Ziel erhalten.

–exclude= : nimmt Dateien, die entsprechen, aus Synchronisation aus. Kann mehrfach angegeben werden.

–delete-excluded: löscht im Ziel evtl. vorhandene Dateien, die einem der exclude-Pattern entsprechen. Ohne diese Option bleiben diese Dateien im Ziel erhalten.

Ein komplettes Beispiel:

rsync --exclude="*/alt/*" --exclude="*orig" --delete --delete-excluded -avz
-e ssh * user@somehost:/var/web/files