Compare commits
7 Commits
a2ac9acf5d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2a0b61ade7 | |||
| 64cb694fb4 | |||
| e6ce7a2727 | |||
| 7a0097d0c7 | |||
| d842c55f59 | |||
| 2979870916 | |||
| 01b271ed98 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,3 +3,5 @@ Backup/
|
|||||||
log.txt
|
log.txt
|
||||||
logrotate.status
|
logrotate.status
|
||||||
*.gz
|
*.gz
|
||||||
|
*.7z
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@ Dieses Skript sichert regelmäßig Daten aus einer Nextcloud-Quelle in ein lokal
|
|||||||
- Synchronisiert ein Verzeichnis (`ptv-nextcloud:/DPV`) mit einem lokalen Ordner `./Backup/`
|
- Synchronisiert ein Verzeichnis (`ptv-nextcloud:/DPV`) mit einem lokalen Ordner `./Backup/`
|
||||||
- Verwendet `rclone --backup-dir`, um **ältere, geänderte oder gelöschte Dateien** in ein Archiv zu verschieben
|
- Verwendet `rclone --backup-dir`, um **ältere, geänderte oder gelöschte Dateien** in ein Archiv zu verschieben
|
||||||
- Erstellt pro Lauf ein neues Archivverzeichnis unter `./Archiv/<Datum-Zeit>`
|
- Erstellt pro Lauf ein neues Archivverzeichnis unter `./Archiv/<Datum-Zeit>`
|
||||||
- Protokolliert alle Vorgänge in `log.txt`
|
- Protokolliert alle Vorgänge in rettedpv.log
|
||||||
- Entfernt leere Verzeichnisse im Archiv
|
- Entfernt leere Verzeichnisse im Archiv
|
||||||
|
|
||||||
## 🧱 Verzeichnisstruktur
|
## 🧱 Verzeichnisstruktur
|
||||||
@ -17,10 +17,6 @@ Dieses Skript sichert regelmäßig Daten aus einer Nextcloud-Quelle in ein lokal
|
|||||||
├── Backup/ # Aktueller Stand der Daten
|
├── Backup/ # Aktueller Stand der Daten
|
||||||
├── Archiv/
|
├── Archiv/
|
||||||
│ └── 2025-07-03-15-30/ # Frühere Versionen
|
│ └── 2025-07-03-15-30/ # Frühere Versionen
|
||||||
├── log.txt # Laufendes Logfile
|
|
||||||
│
|
|
||||||
├── rotate.sh # optional: log.txt rotieren (gegen zu große Dateigrößen)
|
|
||||||
│
|
|
||||||
└── rettedpv.sh # Das Backup-Script
|
└── rettedpv.sh # Das Backup-Script
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -43,7 +39,8 @@ Dieses Skript sichert regelmäßig Daten aus einer Nextcloud-Quelle in ein lokal
|
|||||||
|
|
||||||
## 🔍 Logging & Fehlerbehandlung
|
## 🔍 Logging & Fehlerbehandlung
|
||||||
|
|
||||||
- Alle Logeinträge landen in `log.txt`
|
- Alle Logeinträge landen in `rettedpv.log`
|
||||||
|
- Die Log-Datei liegt im örtlichen Gitea/logger/Logs-Verzeichnis
|
||||||
- Fehler von `rclone` erscheinen dort mit Zeitstempel
|
- Fehler von `rclone` erscheinen dort mit Zeitstempel
|
||||||
- Leere Verzeichnisse im Archiv werden automatisch gelöscht
|
- Leere Verzeichnisse im Archiv werden automatisch gelöscht
|
||||||
- Das optionale Script "rotate.sh" rotiert log.txt und verhindert, dass die Datei zu groß wird.
|
- Das optionale Script "rotate.sh" rotiert log.txt und verhindert, dass die Datei zu groß wird.
|
||||||
|
|||||||
@ -1,10 +0,0 @@
|
|||||||
/home/oberkoetter/Dokumente/Git/rettedpv/log.txt {
|
|
||||||
monthly
|
|
||||||
rotate 3
|
|
||||||
compress
|
|
||||||
missingok
|
|
||||||
notifempty
|
|
||||||
copytruncate
|
|
||||||
dateext
|
|
||||||
}
|
|
||||||
|
|
||||||
30
rettedpv.sh
30
rettedpv.sh
@ -1,45 +1,39 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cd /home/oberkoetter/Dokumente/Git/rettedpv
|
cd $GIT_PFAD/rettedpv
|
||||||
|
|
||||||
# === Konfiguration ===
|
# === Konfiguration ===
|
||||||
REMOTE="ptv-nextcloud:/DPV"
|
REMOTE="ptv-nextcloud:/DPV"
|
||||||
BACKUP_DIR="./Backup"
|
BACKUP_DIR="./Backup"
|
||||||
ARCHIVE_BASE="./Archiv"
|
ARCHIVE_BASE="./Archiv"
|
||||||
LOGFILE="log.txt"
|
LOGFILE="$GIT_PFAD/logger/Logs/rettedpv.log"
|
||||||
|
|
||||||
|
source $GIT_PFAD/logger/logger.sh
|
||||||
|
log_init $LOGFILE
|
||||||
|
log_start
|
||||||
|
|
||||||
# === Zeitstempel & Archivverzeichnis ===
|
# === Zeitstempel & Archivverzeichnis ===
|
||||||
TIMESTAMP=$(date +%Y-%m-%d-%H-%M)
|
TIMESTAMP=$(date +%Y-%m-%d-%H-%M)
|
||||||
ARCHIVE_DIR="${ARCHIVE_BASE}/${TIMESTAMP}"
|
ARCHIVE_DIR="${ARCHIVE_BASE}/${TIMESTAMP}"
|
||||||
mkdir -p "$ARCHIVE_DIR"
|
mkdir -p "$ARCHIVE_DIR"
|
||||||
|
|
||||||
# === Logging-Funktion ===
|
|
||||||
log() {
|
|
||||||
echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOGFILE"
|
|
||||||
echo "-> $1"
|
|
||||||
}
|
|
||||||
|
|
||||||
# === Beginn der Sicherung ===
|
# === Beginn der Sicherung ===
|
||||||
log ""
|
log_info ""
|
||||||
log ""
|
log_info ""
|
||||||
log "🔁 Starte Datensicherung…"
|
log_info "🔁 Starte Datensicherung…"
|
||||||
|
|
||||||
# Log rotieren?
|
|
||||||
log "ℹ️ log.txt rotieren?"
|
|
||||||
/bin/bash ./rotate.sh
|
|
||||||
|
|
||||||
# === Synchronisierung mit rclone ===
|
# === Synchronisierung mit rclone ===
|
||||||
gum spin --title "rclone läuft..." -- rclone sync "$REMOTE" "$BACKUP_DIR" \
|
gum spin --title "rclone läuft..." -- rclone sync "$REMOTE" "$BACKUP_DIR" \
|
||||||
--backup-dir="$ARCHIVE_DIR" \
|
--backup-dir="$ARCHIVE_DIR" \
|
||||||
--log-file="$LOGFILE" \
|
--log-file="$LOGFILE" \
|
||||||
--log-level=INFO
|
--log-level=INFO
|
||||||
log "ℹ️ ERR nach rclone: $?"
|
log_info "ℹ️ ERR nach rclone: $?"
|
||||||
|
|
||||||
# === Aufräumen leerer Archivverzeichnisse ===
|
# === Aufräumen leerer Archivverzeichnisse ===
|
||||||
log "🧹 Entferne leere Verzeichnisse in $ARCHIVE_BASE…"
|
log_info "🧹 Entferne leere Verzeichnisse in $ARCHIVE_BASE…"
|
||||||
find "$ARCHIVE_BASE" -type d -empty -delete
|
find "$ARCHIVE_BASE" -type d -empty -delete
|
||||||
|
|
||||||
# === Ende der Sicherung ===
|
# === Ende der Sicherung ===
|
||||||
log "✅ Datensicherung abgeschlossen."
|
log_info "✅ Datensicherung abgeschlossen."
|
||||||
|
|
||||||
gum style --border normal --margin "1" --padding "1 2" --foreground 212 "✅ Backup abgeschlossen!"
|
gum style --border normal --margin "1" --padding "1 2" --foreground 212 "✅ Backup abgeschlossen!"
|
||||||
|
|||||||
Reference in New Issue
Block a user