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
 
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: 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:
  • Like
Reaktionen: ctrlaltdelete
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:
  • Like
Reaktionen: ctrlaltdelete

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