Issue 1 #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Betroffen: Skript 1:
Der spezifische rsync-Fehler im Protokoll lautet:
rsync error: some files/attrs were not transferred (see previous errors) (code 23)
Details zu diesem Fehler:
Bedeutung von Code 23: Dieser Exit-Code besagt, dass rsync die Übertragung zwar abgeschlossen hat, aber einzelne Dateien oder Datei-Attribute nicht erfolgreich übertragen werden konnten.
Die konkrete Ursache im Log: Der Fehler wurde durch die beiden Dateisystem-Fehler (Invalid argument (22)) beim Benutzer paulc ausgelöst, weil das Zielsystem die Sonderzeichen in den Dateinamen (ITAL#303Y_MEAN_365.csv und ITA#303LY_365.csv) nicht verarbeiten konnte:
`rsync: recv_generator: failed to stat "...": Invalid argument (22)
FIX: Automatische Zeichensatz-Konvertierung (Empfohlen)
Sie können rsync anweisen, die Dateinamen während der Übertragung automatisch vom Quell-Zeichensatz (meistens UTF-8) in den Zeichensatz des Zielsystems (z. B. ISO-8859-1 / Latin-1) zu übersetzen.
Ergänzen Sie Ihren rsync-Befehl um den Parameter --iconv:
bash
rsync -av --iconv=utf-8,iso-8859-1 /quelle/ /ziel/
Wirkung: rsync übersetzt die ungültigen Zeichen im Dateinamen so, dass das Ziel-Dateisystem sie fehlerfrei schreiben kann.
Tipp: Falls die Quell-Dateien von einem Mac stammen, hilft oft --iconv=utf-8-mac,utf-8.
Methode 1: Fehlertolerante rsync-Optionen nutzen (Empfohlen)
Sie können rsync so konfigurieren, dass es bei IO- und Konvertierungsfehlern nicht hart abbricht, sondern fortfährt. Die Fehler werden dabei automatisch in das Standard-Benutzerlog geschrieben.
Passen Sie dazu das Skript /opt/bmi/1_syncFiles.sh an der Stelle an, an der rsync aufgerufen wird, und fügen Sie folgende Parameter hinzu:
bash
rsync --ignore-errors --skip-compress=csv ...
--ignore-errors: Zwingt rsync, das Löschen von Dateien und den Kopiervorgang fortzusetzen, selbst wenn I/O-Fehler (wie die Zeichensatzfehler) auftreten.
Ergebnis: Die defekten Dateien von paulc werden übersprungen, der restliche Kopiervorgang für ihn wird erfolgreich beendet und das Skript läuft für alle nachfolgenden Benutzer weiter. Die Fehler stehen wie gewohnt im Logfile unter /opt/bmi/log/bmi26/1_syncFiles/paulc/.
Methode 2: Automatisches Protokollieren übersprungener Dateien (Skript-Erweiterung)
Wenn Sie eine dedizierte Liste aller übersprungenen Dateien in einer separaten Log-Datei führen möchten, können Sie das Skript /opt/bmi/1_syncFiles.sh so erweitern, dass es die Fehler abfängt.
Suchen Sie im Skript nach dem rsync-Aufruf für die Benutzer und bauen Sie eine Weiche wie diese ein:
bash
Beispiel für den rsync-Aufruf im Skript:
rsync_output=$(rsync -av --iconv=utf-8,iso-8859-1 "$source" "$target" 2>&1)
rsync_ec=$?
if [ $rsync_ec -eq 23 ]; then
echo "[WARNING] Einige Dateien von $user konnten wegen Zeichensatzfehlern nicht kopiert werden." >> /var/log/bmi_sync_skipped_files.log
fi