2012-06-14 7 views
5

Wir wollen einen relativ einfachen Dokumentenspeicher erstellen, aber es gibt einige Anforderungen. Meine Idee war, dass eine Datei von einem separaten Tool/Daemon gescannt und bearbeitet wird, wenn sie sofort beim Speichern ankommt.Wie erstelle ich ein Verzeichnis unter Linux, das sich wie eine Pipe verhält

Das (Pseudo-) DMS sollte den Zugriff über NFS und Samba ermöglichen. Wie ich bisher gesehen habe, wären Pipes in Ordnung, um die eingehende Datei an einige Hooks zu übergeben. Aber ich habe mich gefragt, ob es eine Möglichkeit gibt, ein Verzeichnis als Pipe zu erstellen. Ich habe bisher nur Named Pipes gesehen.

Der Prozess, der jede eingehende Datei in diesem Verzeichnis nehmen sollte, ist ein PHP-Skript, das etwas wie MIME-Typ Raten, CRC32-Check (gegen Wert in DB) tun soll ... Hat jemand einen Hinweis, wie das geht?

EDIT: Ich hoffe, es ist ein bisschen klarer mit der folgenden Erklärung - Ich suche nach einer Möglichkeit, einen "Endpunkt" über Samba und NFS, wo Dateien platziert werden können, die durch Viren-Scan und Meta-Prozess behandelt werden sofort (und schließlich gespeichert).

+1

Sie pumpen zwischen Prozessen, nicht Dateien. Nicht sicher, was du meinst, indem du "Verzeichnis als eine Pipe erstellst" – Attila

+0

Ich dachte an Named Pipes (mit denen man Daten einfügen kann, zB mit 'cat [file]> named_pipe' und Daten holen) - aber das war nur ein erster Schuss im Dunkeln. Ich bin auf der Suche nach einer Möglichkeit, einen "Endpunkt" über Samba und NFS bereitzustellen, wo Dateien abgelegt werden können, die sofort durch Viren-Scanning und Meta-Prozess behandelt werden. Dies sollte eine Echtzeitverarbeitung ermöglichen und großen Speicherverbrauch vermeiden. – rabudde

+0

Erinnert mich an sendmail * -Daemon. Mail geht in den Ordner/var/spool/mqueue, der von sendmail verarbeitet wird und wird schließlich verschoben (oder entfernt). –

Antwort

9

Sie können FUSE verwenden, um ein intermediäres Linux-Dateisystem zu implementieren, das auf Ihrem realen Dateisystem (dem Backend-Dateisystem) sitzt und das ausführt Validierung, die Sie für die Daten benötigen, bevor Sie sie endgültig in das Backend schreiben. Dann bedienen Sie dieses Dateisystem über NFS/Samba.

Eine andere Möglichkeit besteht darin, die API zu verwenden, um über die Änderungen in einem Dateisystembaum benachrichtigt zu werden und die erforderlichen Operationen auszuführen. Das Problem bei diesem Ansatz besteht darin, dass die Verarbeitung asynchron erfolgt, sodass Malware-Dateien für eine kurze Zeit veröffentlicht werden, bis sie gescannt und gelöscht werden.

update: ClamFS macht genau das!

+0

Das hört sich interessant an, ich werde nächste Woche die Werkzeuge ausprobieren, Panzer. – rabudde

2

Haben Sie eigentlich müssen es eine SMB oder NFS-Freigabe sein? Ich denke, Sie sind wahrscheinlich besser dran, einen benutzerdefinierten Servercode zu schreiben/zu verwenden. SMB und NFS wurden entwickelt, um normale Dateien weit entfernt von Ihrem Anwendungsfall zu übertragen

+1

Ich brauche es tatsächlich Samba UND NFS, es gibt keine andere Option für uns. – rabudde

3

Wenn ich Sie richtig verstanden habe, möchten Sie den Endbenutzern eine sehr einfache Schnittstelle zur Verfügung stellen, die in ihr Dateisystem integriert ist. Sie werden einen gewöhnlichen Ordner auf ihrem Betriebssystem sehen, sie werden Dateien kopieren und verschieben, sie umbenennen, usw. Was auch immer sie in einem anderen Ordner auf ihren Computern tun.

Dieser Ordner ist jedoch kein echter Ordner im Hintergrund. Sie möchten vollständige Kontrolle über die Vorgänge in diesem Ordner haben. Wenn sie eine Datei in diesen Ordner kopieren, wollen sie ein PHP-Skript. Wenn sie einen neuen Ordner unter diesem speziellen erstellen, wird sich ein anderes PHP-Skript darum kümmern.

Wie Salva vorgeschlagen hat, ist die Erstellung einer eigenen Dateisystemschnittstelle wirklich eine gute Lösung. aber es ist weder ein schneller noch ein leichter. Da Sie PHP als Ihr Backend erwähnt haben, denke ich, dass Sie einen Ansatz auf höherer Ebene wünschen.

Ihr Problem hat zwei Seiten zu kümmern: Client und Server. Auf Client-Seite benötigen Sie ein Dateisystem, das sich einfach als Ordner auf einem Posix-System oder als Laufwerk unter Windows mounten lässt. Dafür gibt es viele Alternativen, von denen Samba und NFS zwei sind.

Sie werden Server-Seite davon in PHP tun, wie ich verstanden habe. In Anbetracht dessen würde ich WebDAV anstelle von Samba oder NFS empfehlen. Es ist viel einfacher, auf Serverseite zu implementieren. Es ist auf fast jedem modernen Betriebssystem verfügbar.Es gibt sogar Browser-Plugins für den Webdav-Zugriff, so dass Sie sehr einfach mehrere Schnittstellen für Ihre Kunden bereitstellen können.

Wenn Sie auf der Serverseite PHP verwenden, gibt es eine Open-Source-PHP-Bibliothek namens sabredav. Mit einer schnellen Suche bei Google habe ich dafür sogar a tutorial gefunden.

In diesem Setup können Sie Dateien so verarbeiten, wie Sie möchten. Dies kann ein Einzelmaschinen-System sein, indem ein Webserver wie nginx oder Apache in Ihr System für die PHP-Seite eingebettet wird oder als ein Dienst bereitgestellt wird, der auf Ihren Servern läuft.

Ich hoffe, ich habe Ihre Frage richtig verstanden und dies ist die Lösung, nach der Sie gesucht haben.

UPDATE: Wenn Sie eine Chance haben keine andere Lösung für die Verwendung, wie ich vorgeschlagen, und es hat wirklich Samba und NFS sein; Beide Protokolle sind wirklich zu umfangreich, um sie in PHP zu implementieren. Es wird eine große Belastung und langfristige Kopfschmerzen sein.

Sie können jedoch normale NFS/Samba-Server verwenden und versuchen, Datei-Updates im Hintergrund mit Ihrer Anwendung zu überwachen. Das bedeutet, dass die speziellen Funktionen, die Sie bereitstellen möchten, wie Datei-Tags oder Virenscans, mit einer wahrscheinlich akzeptablen Latenz verfügbar sein werden. Um dies zu implementieren, können Sie alle Dateien und Ordner auf dem System überprüfen und an den geänderten/neuen arbeiten. Eine einfachere Sache wäre die Verwendung von Servern mit Protokollierungsmechanismen für jede Aktion und die Verfolgung ihrer Protokolle. Dies kann sogar noch besser sein, als Client-Maschinen direkt zu verbinden. Wenn Sie Ihr System korrekt erstellen, ist die Latenzzeit zwischen Dateiänderungen und deren Verarbeitung selbst auf einem sehr großen System sehr vernünftig. Dafür kann nas4free eine wirklich gute Lösung sein, da es viele Schnittstellen von einem einzigen System bereitstellt und gemäß its features page über Syslog-Fähigkeit verfügt.

+0

Vielen Dank für Ihre großartige Antwort. WebDAV klingt sehr interessant. Aber da diese Lösung in unserem Unternehmen implementiert werden muss, denke ich, dass die Salvas-Lösung solider ist (abgesehen davon, dass einige andere Post-Hooks wie das Scannen nach Metainformationen nicht enthalten sein könnten). Ich werde Ihre Lösung versuchen, aber nicht jetzt, weil es nicht viel Zeit für Experimente gibt. Wirklich danke – rabudde

Verwandte Themen