Webseiten aktuell halten mit dem mirror Skript und rsync
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