Dateien regelmäßig von FTP Server in Datenverzeichniss von Nextcloud kopieren
Hallo,
mein Scanner legt die Scans auf einem FTP Account auf Server 1 ab.
Auf Server 2 mit Ubuntu 20.04 habe ich eine Nextcloud laufen.
Kann ich irgendwie z.B. alle 5 min von Server 2 auf dem FTP Account auf Server 1 nachschauen ob neue Dateien drin sind und wenn ja diese ineinen bestimmten Ordner (im NC Datenverzeichnis) verschieben?
Hintergrund:
Binde ich den FTP in Nextcloud ein, erscheinen die Daten nicht im Webmenü der Nextcloud. Erst nach occ files:scan
Gehe ich den Umweg mit der Verschiebeaktion ins NC Datenverzeichnis werden sie angezeigt.
Extra einen FTP Server auf Server 2 zu installieren will ich auch aus Sicherheitsgründen nicht.
Kann jemand weiterhelfen?
Danke
Christian
mein Scanner legt die Scans auf einem FTP Account auf Server 1 ab.
Auf Server 2 mit Ubuntu 20.04 habe ich eine Nextcloud laufen.
Kann ich irgendwie z.B. alle 5 min von Server 2 auf dem FTP Account auf Server 1 nachschauen ob neue Dateien drin sind und wenn ja diese ineinen bestimmten Ordner (im NC Datenverzeichnis) verschieben?
Hintergrund:
Binde ich den FTP in Nextcloud ein, erscheinen die Daten nicht im Webmenü der Nextcloud. Erst nach occ files:scan
Gehe ich den Umweg mit der Verschiebeaktion ins NC Datenverzeichnis werden sie angezeigt.
Extra einen FTP Server auf Server 2 zu installieren will ich auch aus Sicherheitsgründen nicht.
Kann jemand weiterhelfen?
Danke
Christian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 831551565
Url: https://administrator.de/contentid/831551565
Ausgedruckt am: 20.11.2024 um 15:11 Uhr
37 Kommentare
Neuester Kommentar
Servus!
Warum nicht einfach einen cron-job auf dem Server erstellen, der das alle 5-10 Minuten occ files:scan macht?
Gruß
Luigi
Warum nicht einfach einen cron-job auf dem Server erstellen, der das alle 5-10 Minuten occ files:scan macht?
Gruß
Luigi
Servus.
Rsync oder die Live-Variante lsyncd die via inotify auf Dateisystemänderungen reagiert.
Grüße Uwe
Rsync oder die Live-Variante lsyncd die via inotify auf Dateisystemänderungen reagiert.
Grüße Uwe
Ja klar, wie oben schon geschrieben nutzt lsyncd inotify und damit die Events die das Dateisystem beim erstellen/modifizieren von Dateien generiert. Kann man sich natürlich mit inotifywait und rsync auch selbst in nem Bash Script zimmern wenn man will.
Ich hatte ein ähnliches Szenario: Dateien werden in ein Verzeichnis kopiert, das auch in der NextCloud ersichtlich ist / sein soll.
Mein Lösungsansatz: das Verzeichnis unterhalb des Datenvezeichnisses auf Dateisystemebene in der Nextcloud eingebunden und in der
Nextcloud als external Storage eingebbunden und freigegeben.
Die Rechteproblematik die sich daraus ergibt habe ich mit mount --bind gelöst.
Wenn du genauere Infos haben möchtest einfach ansagen.
Schliesslich gibt es viele Wege die nach Rom führen ;)
Mein Lösungsansatz: das Verzeichnis unterhalb des Datenvezeichnisses auf Dateisystemebene in der Nextcloud eingebunden und in der
Nextcloud als external Storage eingebbunden und freigegeben.
Die Rechteproblematik die sich daraus ergibt habe ich mit mount --bind gelöst.
Wenn du genauere Infos haben möchtest einfach ansagen.
Schliesslich gibt es viele Wege die nach Rom führen ;)
folgende Vorgehensweise hat bei mir zum erfolg geführt:
ich habe das als nfs verzeichnis vorliegen und eingebunden
prereq
verzeichnis das die ftp daten vorhält: SERVER1/FTPVERZ
nextcloud-datenverzeichnis: NCVERZ
Das Datenverzeichnis meint das Verzeichnis in dem auch die NC-User die Daten vorhalten.
auf dem Nextcloud server
mountpoint erstellt: NCVERZ/FTPVERZ
mount SERVER1/FTPVERZ /NCVERZ/FTPVERZ --bind -o force-user=www-data,force-group=www-data
wobei www-data der user ist unter dem der Webserver läuft (bei mir debian)
und um das ganze direkt beim neustart wieder verfügbar zu haben
/etc/fstab edietieren
das bind mount war notwendig, weil sonst die cloud die daten nicht lesen konnte
ich habe hier kein lsync oder inotify oder ähnliches am laufen fuer diesen Vorgang
ich habe das als nfs verzeichnis vorliegen und eingebunden
prereq
verzeichnis das die ftp daten vorhält: SERVER1/FTPVERZ
nextcloud-datenverzeichnis: NCVERZ
Das Datenverzeichnis meint das Verzeichnis in dem auch die NC-User die Daten vorhalten.
auf dem Nextcloud server
mountpoint erstellt: NCVERZ/FTPVERZ
mount SERVER1/FTPVERZ /NCVERZ/FTPVERZ --bind -o force-user=www-data,force-group=www-data
wobei www-data der user ist unter dem der Webserver läuft (bei mir debian)
und um das ganze direkt beim neustart wieder verfügbar zu haben
/etc/fstab edietieren
das bind mount war notwendig, weil sonst die cloud die daten nicht lesen konnte
ich habe hier kein lsync oder inotify oder ähnliches am laufen fuer diesen Vorgang
Deswegen hasse ich solche Anleitungen, da schaltet der gemeine User schnell mal das Hirn aus.
Hier ein aktuelles Ubuntu mit einwandfrei arbeitendem lsyncd
Und jetzt provoziere ich deinen Fehler mal selbst indem ich das Log-Verzeichnis aus dem Dateisystem entferne
Grüße Uwe
Zitat von @hokaido:
Jun 28 22:11:04 srv2 lsyncd[9870]: Cannot open logfile [/var/log/lsyncd/lsyncd.log]!
Woran kann das liegen?
Die Meldung kommt genau dann wenn das Log-Verzeichnis nicht existiert oder die falschen Berechtigungen hat.Jun 28 22:11:04 srv2 lsyncd[9870]: Cannot open logfile [/var/log/lsyncd/lsyncd.log]!
Woran kann das liegen?
Hier ein aktuelles Ubuntu mit einwandfrei arbeitendem lsyncd
Und jetzt provoziere ich deinen Fehler mal selbst indem ich das Log-Verzeichnis aus dem Dateisystem entferne
Grüße Uwe
Zitat von @hokaido:
Wie geschrieben, Verzeichnis und Logfile vorhanden. In der Anleitung steht nämlich nicht, dass man beides erstellen muss. Habe ich aber gemacht. Hirn war also an...
Welche Berechtigungen hast du vergeben?
Keine, wenn du mal ins Service-File reinschaust erkennst du das der Dienst per Default mit Root-Rechten läuft. Die Logfiles selbst darfst du nicht selbst erstellen das macht der Dienst selbst, nur das Log-Verzeichnis erstellst du!.Wie geschrieben, Verzeichnis und Logfile vorhanden. In der Anleitung steht nämlich nicht, dass man beides erstellen muss. Habe ich aber gemacht. Hirn war also an...
Welche Berechtigungen hast du vergeben?
Kann also Root in das Logfile Verzeichnis schreiben reicht das, danach noch ein
systemctl restart lsyncd
und es läuft einwandfrei. Ansonsten poste doch bitte deine Configs und Rechte der Verzeichnisse.Läuft auf sämtlichen hier verfügbaren Distros problemlos, liegt also an deiner Installation.
OK, dann schau mal wem das Logfile nun gehört, also wer ist der Owner?
inotify-tools installieren
Und einem Bash Script ala
Dann noch ne systemd-unit für nen Daemon zusammengetippt und du hast etwas sehr ähnliches ohne weitere Software realisiert.
Grüße Uwe
Dafür dann eine, die angbelich den absoluten Pfad des Quell Ordners nicht finden kann, obwohl der definiert ist.
Geh doch bitte noch mal in dich und versetze dich in unsere Lage. Uns liegt hier nur das vor was du uns an Informationen lieferst. Ohne jegliche Information über deine Konfiguration von lsyncd und Informationen wo Quell- und Zielordner liegen geschweige denn unter welchem Account diese Ordner evt. mit welchen Rechten gemountet sind, oder ob private keys für SSH Accounts nicht richtig hinterlegt sind, können wir hier lange rum raten.Ist sehr seltsam das Tool.
Wie gesagt lsyncd basiert auf bewährten Tools wie inotifywait und rsync und ist keine große Sache. Das gleiche kannst du dir mit einem simplen Shell-Script auch selber bauen bspw. im einfachsten Fall soinotify-tools installieren
sudo apt install inotify-tools
#!/bin/bash
SOURCE="/path/to/quelle/"
TARGET="/path/to/ziel/"
inotifywait -e close_write -m -q -r "$SOURCE" | while read line ;do
rsync -av "$SOURCE" "$TARGET"
done
Grüße Uwe
Auf den Quellordner, hatte den Namen hinterher aber nochmal angepasst das es eindeutiger ist. INotify muss ja die Quelle auf Änderungen überwachen nicht das Ziel .
Kannst du meine erste Frage aus dem vorletzten Post evtl auch noch beantworten, da du dich ja scheust hier vollständige Configs zu posten.
Zitat von @colinardo:
OK, dann schau mal wem das Logfile nach dem Anpassen der Rechte nun gehört, also wer ist der Owner?
OK, dann schau mal wem das Logfile nach dem Anpassen der Rechte nun gehört, also wer ist der Owner?
Zitat von @hokaido:
Also auf dem anderen Server läuft lsyncd ohne irgendwelche Anpassungen der Rechte.
Jepp.Also auf dem anderen Server läuft lsyncd ohne irgendwelche Anpassungen der Rechte.
Lediglich das
Log Verzeichnis und die Log Datei musste ich manuell anlegen (ohne manuellen Eingriff ging es nicht):
Log Verzeichnis anlegen reicht, die Log-Datei erstellt lsyncd selbst!Log Verzeichnis und die Log Datei musste ich manuell anlegen (ohne manuellen Eingriff ging es nicht):
Lösche ich allerdings die Dateien aus dem Quellordner, sind Sie auch aus dem Zielordner weg.
Das musst du ja über die Config Datei von lsyncd konfigurieren, dort gibt es die Direktive delete die du auf false festlegen musst!delete = false
Wie gesagt baut lsyncd auf rsync auf und kennt deshalb so gut wie alle Parameter von diesem welche sich in der lsyncd config konfigurieren lassen.
Warum liest hier eigentlich keiner mehr Dokumentationen?!
Zitat von @hokaido:
Naja, delete = false hab ich schon eingebaut gehabt.
Löscht mir die Dateien aus beiden Ordnern, sowohl Quelle als auch Ziel
Das ist Blödsinn! Das würde auch rsync niemals machen und tut es hier auch nicht! Die Quelle fast rsync niemals an.Naja, delete = false hab ich schon eingebaut gehabt.
Löscht mir die Dateien aus beiden Ordnern, sowohl Quelle als auch Ziel
Du erzählst hier ein Märchen nach dem anderen, sorry.
Deletions
By default Lsyncd will delete files on the target that are not present at the source since this is a fundamental part of the idea of keeping the target in sync with the source. However, many users requested exceptions for this, for various reasons, so all default implementations take delete as an additional parameter.
Valid values for delete are:
delete = true Default. Lsyncd will delete on the target whatever is not in the source. At startup and what's being deleted during normal operation.
delete = false Lsyncd will not delete any files on the target. Not on startup nor on normal operation. (Overwrites are possible though)
delete = 'startup' Lsyncd will delete files on the target when it starts up but not on normal operation.
delete = 'running' Lsyncd will not delete files on the target when it starts up but will delete those that are removed during normal operation.
https://axkibe.github.io/lsyncd/manual/config/layer3/
Ich bin jetzt raus. Lsyncd arbeitet einwandfrei man muss es nur mit den richtigen Parametern füttern.
Viel Erfolg
Grüße Uwe
Korrekt aber das tut er nur wenn die Option falsch oder nicht gesetzt ist.
https://axkibe.github.io/lsyncd/manual/config/layer3/
Alternativ kannst du rsync in den lsyncd Optionen den Parameter --remove-source-files mitgeben der erledigt das gleich mit.
Und genau da sollen die Dateien bleiben.
Was delete = false ja schon macht. Es verhindert das in der Quelle gelöschte Dateien im Ziel auch gelöscht werden.Sie sollen in der Quelle nach dem kopieren gelöscht werden oder eben gleich verschoben. Das geht aber anscheinend nicht.
Doch das geht, genau deswegen habe ich in meinem letzten Post den Link zu den 'Actions" gepostet, darin kannst du ein Löschbefehl für die Quelldateien hinterlegen, der nach dem Übertragen automatisch ausgeführt wird.https://axkibe.github.io/lsyncd/manual/config/layer3/
Alternativ kannst du rsync in den lsyncd Optionen den Parameter --remove-source-files mitgeben der erledigt das gleich mit.
So damit das hier jetzt mal zu einem Ende kommt hat eine funktionsfähige Basis-Config die das macht was du oben geschildert hast nämlich folgendes:
Einen Quell-Ordner mit einem Zielordner One-Way synchronisieren ohne bereits existierende Dateien im Ziel zu löschen und nach der Übertragung die im Quellordner eingeworfenen Dateien zu löschen.
Fazit: Works how it was as designed.
Grüße Uwe
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
-edit-
Wenn man dann noch leere von rsync hinterlassene Ordner in der Quelle tilgen möchte geht das mit folgender Config
Statt dem rsync Binary gibt man den Pfad zu einem benutzerdefiniertem Script (im Beispiel "/test/lsyncd.sh") an und fügt dort folgendes ein:
Das führt also den Rsync Befehl nach Vorgabe von lsyncd aus und bei Erfolg löscht es leere Unterordner aus der Quelle.
Einen Quell-Ordner mit einem Zielordner One-Way synchronisieren ohne bereits existierende Dateien im Ziel zu löschen und nach der Übertragung die im Quellordner eingeworfenen Dateien zu löschen.
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
statusInterval = 20,
nodaemon = false
}
sync {
default.rsync,
source = "/test/source",
target = "/test/target",
delay = 5,
delete = false,
rsync = {
_extra = { "--remove-source-files" }
}
}
Vor dem Sync
Nach dem Sync
Fazit: Works how it was as designed.
Grüße Uwe
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
-edit-
Wenn man dann noch leere von rsync hinterlassene Ordner in der Quelle tilgen möchte geht das mit folgender Config
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
statusInterval = 20,
nodaemon = false
}
sync {
default.rsync,
source = "/test/source",
target = "/test/target",
delay = 5,
delete = false,
rsync = {
binary = "/test/lsyncd.sh",
_extra = { "--remove-source-files" }
}
}
#!/bin/bash
/usr/bin/rsync "$@"
result=$?
if [ $result -eq 0 ];then
find /test/source/* -type d -empty -delete
fi
exit $result
Damit ihr nicht mühsam suchen müsst:
Wäre doch mal klasse und hilft der Community hier wenn du die Snippets und Screenshots von oben mal zusammensammelst und davon mal ein tolles Tutorial für alle machst !! 😉Solche Szenarien werden ja gefühlt mindestens 3mal pro Woche hier gefragt und ein Tutorial würde garantiert helfen !