Überwachen Sie ein Dateisystem und rsync-Änderungen plattformübergreifend mit minimalen Abhängigkeiten

2158
John Feminella

Ich möchte ein langes Ruby- oder Python-Skript starten und das lokale Verzeichnis auf Änderungen an Dateien und neuen Dateien überprüfen lassen. In regelmäßigen Abständen löst das Skript eine unidirektionale Verbindung mit einem Remote-Netzwerk aus.

Dies muss unter Linux (Ubuntu 13.10+) und Windows (Windows 7+) funktionieren. Wichtig ist, dass ich die Anzahl der erforderlichen Abhängigkeiten minimieren möchte. Ich möchte auf jedem System dasselbe installieren, indem Sie einfach einige Dateien in einem Verzeichnis ablegen - kein Installationsprogramm.

Ist es möglich, das System, das ich beschreiben möchte, ohne einen Installer zu bekommen? Wenn das so ist, wie?

0
Rsync hat nur eine Option, um Änderungen zu überwachen. Ricky Beam vor 10 Jahren 0
@ RickyBeam: Ich muss die Änderungen auf programmatische Weise überwachen, die für die Befehlszeilenoptionen von rsync nicht geeignet sind. Aber danke fürs Heads-Up! John Feminella vor 10 Jahren 0
@ RickyBeam macht das wirklich? Wie? laggingreflex vor 8 Jahren 0

3 Antworten auf die Frage

1
Timothy C. Quinn

In der Vergangenheit, als ich dies von Windows-Plattform zu einem anderen System machte, das sshd oder sftp unterstützt, habe ich WinSCP verwendet, das über sehr gut geschriebene Synchronisierungsfunktionen verfügt. WinSCP kann auch von der Befehlszeile aus ausgeführt werden, um ein lokales Verzeichnis zu überwachen und Dateien per SCP- oder SFTP-Protokoll automatisch in ein Remote-Dateisystem zu verschieben und / oder zu ziehen.

Die WinSCP-Lösung ist sehr robust und in hohem Maße konfigurierbar, jedoch für Windows geschrieben.

Ich habe WinSCP für die Installation auf meinem Linux-Rechner mit 32-Bit-Weinen erhalten, und es funktioniert einigermaßen gut, obwohl ich die Synchronisationsfunktion von CLI noch nicht unter Linux ausgeführt habe. Ich bin zuversichtlich, dass das CLI in Kürze an Linux arbeiten wird, sobald ich mich darauf konzentrieren kann.

0
pxul

Als mögliche Lösung für den ersten Teil Ihrer Frage sollten Sie sich die inotify-tools ansehen. Diese enthält das Tool inotifywait, das ein Verzeichnis (oder einen Satz von Verzeichnissen rekursiv) überwacht und Benachrichtigungen über Änderungen ausgibt (diese können auf bestimmte beschränkt sein.) Ereignistypen, z. B. Dateierstellung, -löschung, -änderung usw.). Weitere Informationen finden Sie auf der Manpage .

Ich bin nicht mit der Programmierung (Python oder auf andere Weise) auf Windows-Maschinen vertraut, aber es gibt einen Port inotifywait für Windows in Form von inotify-win, der nach der Erstellung der ausführbaren Datei vermutlich über ein Unterverfahren aus einem Skript ausgeführt werden kann mit minimalen plattformspezifischen Änderungen gegenüber der Linux-Version.

Für den zweiten Teil Ihrer Frage könnten Sie sich für SFTP mit paramiko entscheiden . Allerdings scheint die Abhängigkeit von PyCrypto diese Option aus Windows-Sicht zu einer Herausforderung zu machen.

Ich weiß, dass dies keine vollständige Antwort auf alle Teile Ihrer Frage ist, aber hoffentlich gibt es hier etwas, das Sie nützlich finden.

0
Charl Botha

Ich habe Gutes über https://pypi.python.org/pypi/watchdog gehört - eine Python-Bibliothek für die Überwachung von Dateisystemereignissen, die unter Linux, OSX, FreeBSD und Windows funktioniert.

Ich würde etwas wie bbfreeze oder pyinstaller verwenden, um Ihr gesamtes Werkzeug in Binärdateien für die verschiedenen Plattformen zu packen. rsync hat bereits Installer für die meisten Systeme.