rcloning.sh
Ein Bash-Script zum automatisierten Synchronisieren von Dateien zwischen zwei rclone-Remotes mit integrierter Archivierung und strukturiertem Logging.
Funktionsweise
Das Script führt folgende Schritte in Sequenz aus:
- Synchronisation / Kopieren — Überträgt Dateien von
QUELLEnachZIELperrclone syncoderrclone copy. - Archivierung — Dateien, die am Ziel überschrieben oder gelöscht werden, landen vorher automatisch in einem stündlich benannten Archivordner (
JJ-MM-TT-HH). - ZIP-Erstellung — Das Archivverzeichnis wird als
.zipgepackt. - Aufräumen — Das Archivverzeichnis wird nach erfolgreichem Packen gelöscht; bei Fehlercode
3(kein Archiv nötig, da keine Änderungen) wird eine entsprechende Info geloggt.
Voraussetzungen
| Anforderung | Hinweis |
|---|---|
rclone |
Muss installiert und konfiguriert sein |
logger.sh |
Eigenes Logging-Modul, Pfad über GIT_PFAD |
GIT_PFAD |
Umgebungsvariable, in .bashrc gesetzt (z. B. ~/Dokumente/Gitea) |
| Konfigurierte Remotes | ptv-nextcloud und spzssh müssen in ~/.config/rclone/rclone.conf vorhanden sein |
Konfiguration
Alle Einstellungen befinden sich im Abschnitt # Einstellungen # am Anfang des Scripts:
| Variable | Beschreibung | Beispielwert |
|---|---|---|
IST_TEST |
Testlauf ohne Übertragung (--dry-run) |
ja / nein |
QUELLE |
Quell-Remote und -Pfad | ptv-nextcloud:/DPV |
ZIEL |
Ziel-Remote und -Pfad | spzssh:/srv/.../DPVonNextcloud/ |
ARCHIV |
Zielort für archivierte (überschriebene/gelöschte) Dateien | spzssh:/srv/.../Archiv/JJ-MM-TT-HH |
MODUS |
Übertragungsmodus | sync oder copy |
LOGLVL |
Detailgrad des rclone-Logs | DEBUG, INFO, NOTICE, ERROR |
IGNORE |
Optionaler rclone-Parameter zum Überspringen vorhandener Dateien | leer lassen, wenn nicht benötigt |
EXCLUDE |
Auszuschließende Pfade/Dateien | .git/ |
Hinweis: Bei
MODUS=syncwerden am Ziel Dateien gelöscht, die in der Quelle nicht mehr existieren. Gelöschte/überschriebene Dateien werden vorher inARCHIVgesichert.
Logging
Das Script nutzt logger.sh für strukturiertes Logging. Die Logdatei liegt unter:
$GIT_PFAD/logger/Logs/rcloning.log
Zusätzlich schreibt rclone direkt in dieselbe Datei (--log-file). Log-Level für rclone und das interne Logger-Modul werden separat über LOGLVL gesteuert.
Archiv-Logik
Der Archivordner wird nach Datum und Stunde benannt:
Archiv/
└── 25-03-26-14/ ← Verzeichnis (temporär)
└── ...
25-03-26-14.zip ← Gepacktes Archiv (dauerhaft)
Exit-Code rclone archive create |
Verhalten |
|---|---|
0 |
Erfolg → temporäres Verzeichnis wird gelöscht |
3 |
Kein Archiv erstellt (keine überschriebenen/gelöschten Dateien) → Info-Meldung |
| Sonstige | Fehler → Fehlermeldung im Log, Verzeichnis bleibt erhalten |
Verwendung
# Direkter Aufruf
bash rcloning.sh
# Als Cronjob (täglich um 02:00 Uhr)
0 2 * * * /bin/bash /pfad/zu/rcloning.sh
Für einen Testlauf ohne tatsächliche Übertragung IST_TEST="ja" setzen.
Bekannte Einschränkungen
rclone archiveist ein experimentelles Plugin/Subcommand — nicht in allen rclone-Versionen standardmäßig verfügbar.- Der Syntax
if [ $IST_TEST = "ja"]enthält einen fehlenden Leerzeichen vor]— sollte zu[ $IST_TEST = "ja" ]korrigiert werden. - Pfade im
ZIELundARCHIVsind aktuell fest im Script kodiert und sollten bei Änderung der Disk-UUID angepasst werden.