Datei-Synchronisierung zwischen mehreren Desktop-Clients + Anwendern fehlerhaft

Hallo zusammen,

wir haben ein Problem mit der Synchroniserung unserer Nextcloud Dateien über den Nextcloud Client und hoffen hier auf wertvolle Tipps bzw. mögliche Problemlösungen. Der Beitrag ist sehr ausführlich, da uns das Thema schon länger begleitet und wir mehrere Szenarien haben, die bei der Problemlösung helfen können.

Zu unserer Situation:

Wir haben ca. 100 Freigaben auf einem Windows Fileserver, die wir per SMB/CIFS in unserer Nextcloud als Externen Speicher einbinden. Die Gruppen befinden sich in einer Samba AD und werden in der Nextcloud per LDAP abgerufen. Der Fileserver ist Mitglied in der Samba AD. NTFS-, Freigabe- und Nextcloud-Berechtigungen werden via Gruppenberechtigungen gesetzt.

Zum Problem:

Ich habe eine Freigabe für Benutzer A und Benutzer B erstellt. Ich nenne diese Freigabe „Info“. Ich binde die Freigabe als externen Speicher ein. Benutzer A und Benutzer B sind in der Gruppe „Leitung“. Leitung hat das Recht „Ändern“ in den NTFS- und Freigabeberechtigungen. In Nextcloud wird Leitung als berechtigte Gruppe hinzugefügt. Das Häkchen „Auf Änderung Prüfen“ ist auf „Bei jedem direkten Zugriff“ gesetzt.

Benutzer A und Benutzer B verwenden beide den Nextcloud-Client. Beide synchronisieren den Ordner „Info“. Die Nextcloud-Clients sind beide synchronisiert. Benutzer A hat eine Datei „Test.txt“ im Hauptverzeichnis von „Info“ erstellt (Info\Test.txt). Die neu erstellte Datei taucht nach wenigen Sekunden bei Benutzer B auf. Benutzer B füllt die Datei jetzt mit Inhalt und speichert die Änderungen. Die Änderungen werden nach wenigen Sekunden bei Benutzer A angezeigt. → Synchronisierung im Hauptverzeichnis der Freigabe funktioniert.

Benutzer A erstellt einen Unterordner in „Info“. Der Unterordner heißt „Info1“. Der Unterordner wird bei Benutzer B nach wenigen Sekunden angezeigt. Benutzer A erstellt im Unterordner eine Datei „Test.txt“. Die neu erstellte Datei im Unterordner wird bei Benutzer B nach wenigen Sekunden angezeigt. → Neue Dateien und Ordner/Unterordner werden synchronisiert.

Die Datei „Test.txt“ im Unterordner „Info1“ wird jetzt von Benutzer B mit Inhalt befüllt und gespeichert. Der Inhalt taucht nicht bei Benutzer A auf. Auch nach einer langen Wartezeit nicht. Der Nextcloud-Client prüft regelmäßig auf Änderungen, jedoch wird die „Text.txt“ im Unterordner „Info1“ nicht synchronisiert. Eine händische Synchronisierung mit „Synchronisierung erzwingen“ hilft nicht. Wenn Benutzer A jetzt die Ordnersynchronisierung entfernt und neu hinzufügt, befindet sich die aktuelle „Test.txt“ in „Info1“. Der Inhalt von Benutzer B ist zu sehen. → Durch Ordnersynchroniserung entfernen und neu hinzufügen wird die aktuelle Datei im Nextcloud-Client synchronisiert.

Dieselbe Ausgangssituation, dass die „Test.txt“ im Unterordner „Info1“ bei Benutzer A nicht aktuell ist. Inhalt von Benutzer B ist nicht sichtbar.

Benutzer A meldet sich jetzt in der WebUI von Nextcloud an. Er navigiert zu der „Test.txt“ im Unterordner „Info1“. Benutzer A öffnet die „Test.txt“. Der aktuelle Inhalt von Benutzer B wird angezeigt. Benutzer A schließt die Datei. Anschließend wird die Datei beim Nextcloud Client von Benutzer A synchronisiert. → Öffnen der Datei über WebUI führt dazu, dass die aktuelle Datei mit Inhalt von Benutzer B beim Benutzer A synchronisiert wird.

Nextcloud Version 30.0
PHP Version 8.3.9
Nextcloud-Client Version auf Windows 3.15.3
Datenbank mysql

Wir konnten das Problem mittlerweile selbstständig lösen.
Wir haben mithilfe des Notify-Dienstes eine Ordnerüberwachung für jede Freigabe erstellt und diese mithilfe eines Scripts automatisiert.

  1. Die Mount-IDs der Freigaben heraussuchen:
sudo -u www-data php /var/www/nextcloud/occ files_external:list
  1. Ein Script erstellen:
vi /home/notify_script.sh
  1. Folgenden Inhalt einfügen und MOUNT-IDS sowie USER und PASSWORD anpassen:
#!/bin/bash
sleep 60 # Wartet 60 Sekunden (1 Minute)

# Liste der Mount-IDs
MOUNT_IDS=("1" "5" "6" "7" "...")

# Nextcloud Pfad und Benutzerdaten
NEXTCLOUD_PATH="/var/www/nextcloud"
USER="domain/benutzer"
PASSWORD="passwort_hier_einfügen"

# Schleife über alle Mount-IDs
for MOUNT_ID in "${MOUNT_IDS[@]}"
do
  sudo -u www-data php "$NEXTCLOUD_PATH/occ" files_external:notify -u "$USER" -p "$PASSWORD" "$MOUNT_ID" &
done

Der eingetragenen Benutzer muss Schreibrechte auf die zu überwachenden Ordner haben.

  1. Das Script ausführbar machen:
chmod +x /home/notify_script.sh
  1. Einen Cronjob erstellen und dafür sorgen, dass das Script nach jedem Neustart ausgeführt wird.
crontab -e

Inhalt:

@reboot /home/notify_script.sh >> /home/notify_script.log 2>&1

Mit z.B. htop kann nun geprüft werden, ob für jede Freigabe ein Notify-Dienst läuft.
Das Script sollte nicht manuell bzw. nicht mehrmals ausgeführt werden, da sonst alle Prozesse doppelt oder öfter gestartet werden.

This topic was automatically closed 8 days after the last reply. New replies are no longer allowed.