Kopieren von Ordnern mit Inhalten über den Aufgabenplaner per Skript

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Es geht da nicht um die Erweiterte Freigabeberechtigung, sondern um die Windows-ACL.

1775427227038.png
 
  • Like
Reaktionen: shift
Hallo luddi und shift,

erstmal ein dickes Dankeschön @luddi , für die wirklich ausführliche und super hilfreiche SyncThing-Anleitung. So eine detaillierte Anleitung wäre eigentlich einen eigenen Thread wert, damit man sie schnell wiederfindet und sie nicht im Forum untergeht. Wirklich wertvoll.

Trotzdem musste ich beim Lesen ein bisschen schmunzeln. Genau aus meiner eigenen Erfahrung: Man will "eigentlich nur mal eben..." einen Ordner spiegeln – und findet sich plötzlich mitten im Gestrüpp wieder, mit der Machete in der Hand, um sich erstmal einen Weg freizuschlagen. Man fängt an, ein Problem zu lösen. Man hört auf, fünf neue Hobbys zu haben. Das ursprüngliche Problem wartet geduldig. 😊 Dabei lernt man zwar viel, aber eigentlich hat man ja ganz andere Baustellen und möchte seine Zeit nicht ständig in neue Details investieren.

Ich habe SyncThing selbst lange genutzt und kenne die Stolperfallen nur zu gut. Für den einfachen Fall „nur mal einen Ordner zu spiegeln" ist es alles andere als einfach/intuitiv und schnell eingerichtet. Genau deshalb hat bei mir das „Set and Forget" nie richtig geklappt – nach ein paar Monaten musste ich mich immer wieder neu einarbeiten; dazu die Unsicherheit mit der Android App.

Deshalb bin ich letztes Jahr zu Resilio Sync gewechselt. Das läuft bei mir reibungslos, synchronisiert problemlos auch auf demselben Gerät, ist Multi-User-tauglich und war genauso schnell eingerichtet wie Cloudsync mit WebDAV – einfach „set and forget".

SyncThing ist natürlich eine valide Option und funktioniert auch. Ich persönlich bleibe aber lieber bei einfachen Lösungen, die langfristig entspannt laufen.

Beste Grüße,
Steven
 
@luddi dein rsync Script will bei mir nicht klappen. Im Script muss man ja nichts weiter machen, als den Pfad zu ergänzen, aber selbst wenn ich dein Script unbearbeitet mit den dortigen Pfaden nehmen, will das bei mir nicht klappen - leider. Die Echtzeitsyncro würde ich dabei im Aufgabenplaner mit, führe das Script alle paar Minuten aus. So hätte Omaneine fast Echtzeitsyncro.

@stevenfreiburg Das ist hier eine wirklich gute Anleitung für Syncthing, das ist einen einen Thread wert. Mit weiteren hilfreichen Themen zu rsync und WebDAV.

Ich für mich werde wahrscheinlich bei WebDAV oder rsync (wenn es dann mal läuft) bleiben. Syncthing ist für meinen case wahrscheinlich nicht das richtige.
 
Poste doch mal das Script mit deinen Settings?
 
@ctrlaltdelete das ist identisch mit dem was @luddi gepostet hat. nur der Pfad ist etwas anders.

#!/bin/bash

# ----------------------------------------------------------------------------------------------------------
# Pfad-Variablen definieren
SRC_DIR="/volume1/homes/john/cloudzuhause/Dokumente/_sync"
TARGET_SHARE="/volume1/share/dokumente/_sync"
# Ermittele automatisch den Namen des Quell-Unterordners und setze daraus den Zielpfad zusammen
SRC_BASENAME=$(basename "$SRC_DIR")
TARGET_DIR="$TARGET_SHARE/$SRC_BASENAME"

# ----------------------------------------------------------------------------------------------------------
# Dieses Skript synchronisiert das Verzeichnis $SRC_DIR in das gemeinsame Verzeichnis $TARGET_DIR.
# Es setzt sowohl klassische Linux-Berechtigungen (chmod/chown) als auch Synology-ACLs,
# um die Kompatibilität für alle Zugriffsszenarien (Linux, SMB, NFS, DSM File Station usw.) sicherzustellen.
#
# Warum beides?
# - Klassische Linux-Berechtigungen (chmod/chown) werden von vielen Linux-Tools und NFS verwendet.
# - Synology-ACLs werden von DSM, SMB (Windows-Freigaben) und für erweiterte Rechteverwaltung genutzt.
# - Durch das Setzen beider Methoden ist sichergestellt, dass alle Nutzer – egal wie sie zugreifen –
# die richtigen Rechte haben.


# Synchronisiere das Verzeichnis $SRC_DIR ins gemeinsame Verzeichnis $TARGET_SHARE (unidirektional, Spiegelung)
rsync -avh --progress --delete "$SRC_DIR" "$TARGET_SHARE/"

# Setze Besitzer und Gruppe für alle Dateien und Ordner in $TARGET_DIR auf root:users
chown -R root:users "$TARGET_DIR"

# Setze die Rechte für alle Verzeichnisse in $TARGET_DIR auf 775 (rwxrwxr-x)
find "$TARGET_DIR" -type d -exec chmod 775 {} \;

# Setze die Rechte für alle Dateien in $TARGET_DIR auf 664 (rw-rw-r--)
find "$TARGET_DIR" -type f -exec chmod 664 {} \;

# Übernehme die ACLs vom übergeordneten Verzeichnis $TARGET_SHARE auf $TARGET_DIR
synoacltool -copy "$TARGET_SHARE" "$TARGET_DIR"

# Übernehme die ACLs rekursiv von $TARGET_SHARE auf alle Dateien und Unterordner in $TARGET_DIR
find "$TARGET_DIR" -exec synoacltool -copy "$TARGET_SHARE" {} \;


Im Aufgabenplaner auch von @luddi
chmod +x /volume1/scripts/sync-dir-xyz.sh
/volume1/scripts/sync_dir_xyz.sh > /dev/null 2>&1

/volume1/scripts/sync_dir_xyz.sh ist vorhanden
 
Läuft das Script als root im Aufgabenplaner?
Was steht im Log des Aufgabenplaners?
Lass es mal direkt über die Konsole als root laufen, dann solttest du den Fehler live sehen.
 
Entweder wie @ctrlaltdelete erwähnt direkt über die Konsole laufen lassen oder zwei andere Möglichkeiten um an die Ausgabe zu gelangen wären:

a.) Die Ausgabe via E-Mail vom Aufgabenplaner schicken lassen
Dabei aber unbedingt die Umleitung der Ausgabe nach /dev/null entfernen

Bash:
chmod +x /volume1/scripts/sync-dir-xyz.sh
/volume1/scripts/sync_dir_xyz.sh

1775488273085.png


b.) Die Ausgabe in eine Datei umleiten anstelle nach /dev/null

Bash:
chmod +x /volume1/scripts/sync-dir-xyz.sh
/volume1/scripts/sync_dir_xyz.sh > /volume1/scripts/sync_dir_xyz_log.txt


Und nicht vergessen die Aufgabe als "root" ausführen lassen.
1775488236468.png
 
Hier das Ergebnis

admin@SERVER:~$ chmod +x /volume1/scripts/sync_dir_xyz.sh /volume1/scripts/sync_dir_xyz.sh > /volume1/scripts/sync_dir_xyz_log.txt
chmod: changing permissions of '/volume1/scripts/sync_dir_xyz.sh': Operation not permitted
chmod: changing permissions of '/volume1/scripts/sync_dir_xyz.sh': Operation not permitted


root@SERVER:~# chmod +x /volume1/scripts/sync_dir_xyz.sh /volume1/scripts/sync_dir_xyz.sh > /volume1/scripts/sync_dir_xyz_log.txt
root@SERVER:~#

Log.txt ist leer

Ergebnis erfolglos!


Über den Aufgabenplaner im log.txt

sending incremental file list

sent 20 bytes received 12 bytes 64.00 bytes/sec
total size is 0 speedup is 0.00
 
Zuletzt bearbeitet:
Was machst du da? Du solltest das schon so ausführen wie es beschrieben wurde.
chmod +x /volume1/scripts/sync_dir_xyz.sh /volume1/scripts/sync_dir_xyz.sh > /volume1/scripts/sync_dir_xyz_log.txt Damit führst du schon mal das Script nicht aus....
Die Befehle stehen ja nicht umsonst untereinander. Also sind es zwei verschiedene Befehle und nicht einer.
 
  • Like
Reaktionen: shift und luddi
Sorry, Anfängerfehler

root@SERVER:~# /volume1/scripts/sync_dir_xyz.sh > /volume1/scripts/sync_dir_xyz_log.txt
rsync: change_dir "/volume1/homes/John/cloudzuhause/Dokumente" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1464) [sender=3.1.2]
chown: cannot access '/volume1/share/dokumente/_sync/_sync': No such file or directory
find: `/volume1/share/dokumente/_sync/_sync': No such file or directory
find: `/volume1/share/dokumente/_sync/_sync': No such file or directory
find: `/volume1/share/dokumente/_sync/_sync': No such file or directory
root@SERVER:~#

ok, _sync/_sync?

Edit: So, nun klappt das irgendwie halb, es werden nur nicht die Daten aus _sync ins Zielverzeichnis kopier, sonder der gesamte Ordner -sync. Nun habe ich im _sync Zielordner den Ordner gesamten _sync aus der Quelle.

Edit: Nun klappt es, nach Pfadkorrektur. Prima!


Nun habe ich die Wahl, rsync oder WebDAV? Kann nicht nicht entscheiden??? Bei rsync würde ich die Ausführung alle 5 min planen, was meint ihr zur Häufigkeit alle 5 Min?
 
Zuletzt bearbeitet:
Du hast die Pfade wie folgt definiert:
Code:
SRC_DIR="/volume1/homes/john/cloudzuhause/Dokumente/_sync"
TARGET_SHARE="/volume1/share/dokumente/_sync"


Du hättest in dem Skript die Pfade wie folgt definieren müssen. Vor allem den Pfad für TARGET_SHARE ! ! !
Code:
SRC_DIR="/volume1/homes/john/cloudzuhause/Dokumente/_sync"
TARGET_SHARE="/volume1/share/dokumente"

Ich habe das Skript so aufgebaut, dass das gesamte Quellverzeichnis (in deinem Fall _sync) nach /volume1/share/dokumente kopiert wird.

Hier einmal visualisiert:

Code:
+----------------------------------------------------+
| SRC_DIR                                            |
| /volume1/homes/john/cloudzuhause/Dokumente/_sync   |
|                                                    |
|   +--------+                                       |
|   | _sync  |                                       |
|   +--------+                                       |
+----------------------------------------------------+
          |
          |   (copy via rsync the complete directory not only the content)
          v
+----------------------------------+
| TARGET_SHARE                     |
| /volume1/share/dokumente/        |
|                                  |
|   +--------+                     |
|   | _sync  |                     |
|   +--------+                     |
+----------------------------------+
          |
          |   (combined for setting the ownership and permission)
          v
+----------------------------------------------------------+
| TARGET_DIR                                               |
| /volume1/share/dokumente/_sync                           |
+----------------------------------------------------------+


Das Script alle 5 min laufen lassen spricht aus meiner Sicht nichts dagegen. Das einzige auf was man gegebenenfalls aufpassen muss ist eine mögliche Überlappung zu vermeiden. Das Script nicht nochmals auszuführen wärend der vorherige Durchgang noch nicht abgeschlosssen ist.
 
Zuletzt bearbeitet:
Weshalb habe ich diese Variante gewählt? Weil rsync in diesem Fall den Ordner _sync komplett überträgt und somit auch anleget wenn er am Ziel nicht existiert.

Variante #1 indem wir rsync wie bereits bekannt verwenden. Hier wird als Quelle "$SRC_DIR" ohne folgendem Slash damit das Verzeichnis _sync selbst verwendet werden soll. Und für das Ziel verwenden wir "$TARGET_SHARE/" gefolgt von einem Slash damit das Quellverzeichnis hier hinein kopiert wird.
Code:
# OPTION #1: Synchronisiere das gesamte Verzeichnis $SRC_DIR ins gemeinsame Verzeichnis $TARGET_SHARE
rsync -avh --progress --delete "$SRC_DIR" "$TARGET_SHARE/"

Variante #2 wäre dann den Inhalt von _sync nach _sync am Ziel kopieren. Davor müssen wir aber erst den Ordner _sync anlegen sollte er am Ziel noch nicht existieren. Hier wählen wir als Quelle den Inhalt von "$SRC_DIR"/ gefolgt von einem Slash und als Ziel das existierende Verzeichnis "$TARGET_DIR/" auch von einem Slash gefolgt.
Bash:
# OPTION #2: Synchronisiere den Inhalt von $SRC_DIR direkt nach $TARGET_DIR
# Prüfe, ob $TARGET_DIR existiert, und lege es ggf. an
if [ ! -d "$TARGET_DIR" ]; then
    mkdir -p "$TARGET_DIR"
fi
rsync -avh --progress --delete "$SRC_DIR"/ "$TARGET_DIR/"

Am Schluss ist das Ergebnis das gleiche. Nur die Vorgehensweise ist anders. Aber in beiden Fällen werden die beiden Variablen SRC_DIR und TARGET_SHARE gleich definiert.
 
Zuletzt bearbeitet:
Top! Ich bin am Ziel. Vielen lieben Dank für deine wirklich tolle Hilfe! Das Forum hier, mit seinen ganzen tollen und hilfsbereiten Leute, ist klasse! Immer wurde mir hier schnell und richtig gut geholfen 👍
 
Zuletzt bearbeitet:
  • Like
Reaktionen: ctrlaltdelete
Das ist toll und danke für dein Feedback :giggle:

Und falls du noch den Sperrmechanismuns einbauen möchtest um gleichzeitige Ausführungen des Scripts zu verhindern dann einfach lediglich diesen Teil am Anfang des Scripts einbauen.

Bash:
#!/bin/bash

# Lock file mechanism to prevent concurrent runs
SCRIPT_NAME=$(basename "$0")
LOCKFILE="/tmp/${SCRIPT_NAME}.lock"
if [ -e "$LOCKFILE" ]; then
    echo "Script is already running. Exiting."
    exit 1
fi
trap 'rm -f "$LOCKFILE"' EXIT
touch "$LOCKFILE"

# Pfad-Variablen definieren
SRC_DIR="/volume1/homes/john/cloudzuhause/Dokumente/_sync"
TARGET_SHARE="/volume1/share/dokumente"

# ... rest deines Scripts ...
 
In diesem Thread steckt mittlerweile eine Menge gebündeltes Wissen.

Und natürlich wäre es, gemäß dem bewährten Forums-Motto „Nur die Harten kommen in den Garten“, jetzt folgerichtig, das alles so stehen zu lassen - wer sich das Script nicht selbst aus 17 Beiträgen zusammenpuzzlen kann, hat sich die höheren Weihen eben nicht verdient. 😄

Was haltet ihr aber davon, dem Thread einen Abschluss-Post zu gönnen? Also einmal das komplette rsync-Script zusammenhängend, so wie es am Ende auch funktioniert, idealerweise mit Kommentaren im Code. Das wäre für alle, die später über diesen Thread stolpern, Gold wert.


Mich persönlich würde außerdem interessieren: Kann man das Script auch zwischen verschiedenen Geräten/Systemen einsetzen, also nicht nur NAS => NAS , sondern auch Mac => NAS, Linux => Linux oder Windows => Linux/NAS?
Welche Login-Daten bzw. SSH-Einstellungen müsste man dafür anpassen?
 
Ja rsync funktioniert nicht nur lokal sondern auch als Client Host / Server Host Verbindung via ssh.
Und dabei ist die Richtung aus Sicht des zu initiierenden Host vollkommen egal.
Man kann entweder ein Sync vom Client Host in Richtung Server Host (push) oder umgekehrt ausführen (pull).
Dabei ist vollkommen egal welcher Host den rsync Befehl ausführt und auch in welche Richtung man die Synchronisierung anstoßen möchte.

1. Push: Lokal → Remote (Client sendet Daten zum Server)
a) Mit Passwort (interaktive Eingabe)
Bash:
rsync -avh /lokaler/pfad/ benutzer@remotehost:/entfernter/pfad/
Du wirst nach dem Passwort des Benutzers auf dem Remote-Host gefragt.

b) Mit SSH-Key (ohne Passwortabfrage)
Bash:
rsync -avh -e "ssh -i /pfad/zum/private_key" /lokaler/pfad/ benutzer@remotehost:/entfernter/pfad/
Stelle sicher, dass dein öffentlicher Schlüssel in ~benutzer/.ssh/authorized_keys auf dem Remote-Host hinterlegt ist.

2. Pull: Remote → Lokal (Client holt Daten vom Server)
Bash:
rsync -avh benutzer@remotehost:/entfernter/pfad/ /lokaler/pfad/
a) Mit Passwort (interaktive Eingabe)
Du wirst nach dem Passwort des Benutzers auf dem Remote-Host gefragt.

b) Mit SSH-Key (ohne Passwortabfrage)
Bash:
rsync -avh -e "ssh -i /pfad/zum/private_key" benutzer@remotehost:/entfernter/pfad/ /lokaler/pfad/
Auch hier muss dein öffentlicher Schlüssel auf dem Remote-Host autorisiert sein.

Hinweise
Funktioniert zwischen Mac, Linux und NAS (sofern rsync und SSH verfügbar sind).
Unter Windows empfiehlt sich WSL, Cygwin oder Tools wie DeltaCopy.
Für SSH-Key-Authentifizierung: Schlüsselpaar mit ssh-keygen erzeugen und den öffentlichen Schlüssel mit ssh-copy-id oder manuell auf den Zielhost kopieren.
Für eine automatisierung via Script empfiehlt sich eine passwortlose Authentifizieurng über SSH-Key wobei in diesem Fall der private Schlüssel ohne Passwort erzeugt wird.

Wenn du Details über die Funktionsweise bzw. Bedienung von rsync oder auch ssh benötigst wirst du diese entweder hier im Forum oder auf anderen hilfreichen Seiten mit genügend Lesestoff finden.
 
Hallo zusammen, eigentlich hatte ich mich hier im wesentlichen auf WebDAV entschieden. Nur so ganz gefällt mir das auch nicht, ich habe ständig Probleme mit doppelten Dateien. Besonders wenn ich einen Ordner umbenenne, habe ich plötzlich zwei Ordner mit dem gleichen Inhalt, nur der Ordnername ist wegen der Umbenennung anders. Das nervt langsam.

Ich werde mal rsync ein paar Tage test. Dazu mal eine Verständnisfrage, ist dein Code @luddi ein reiner Kopierjob, also nur Ordner von SRC_DIR="/volume1/homes/john/cloudzuhause/Dokumente/_sync"<br> nach TARGET_SHARE="/volume1/share/dokumente/_sync" kopieren? Oder werden die Ordnerinhalte abgeglichen, synchronisiert, sodass es egal ist, in welchen Ordner Änderungen vorgenommen werden?
 
Was hat das genau mit WebDAV zu tun?
Habe dieses Problem gar nicht.
Ich kann nicht sagen, wieso es dazu kommt. Es bilden sich auch nicht ständig doppelte Ordner - besonders aufgefallen beim Umbenennen von Ordnern mit Inhalten, dann habe ich auf einmal den Ordner mit alten und den Ordner mit neuen Namen. Es ist einfach so seitdem ich WebDEV laufen habe.
 
Das liegt aber nicht an WebDAV sondern am Sync. Das dafür benutzte Programm weiß nichts von einer Umbenennung und sieht nur ein neues Verzeichnis in der Quelle, welches im Ziel nicht existiert, sowie ein in der Quelle fehlendes Verzeichnis. Was mit dem Verzeichnis im Ziel, das in der Quelle nicht mehr existiert, passiert, hängt von deinen Sync-Optionen ab.
 
  • Like
Reaktionen: w00dcu11er

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat