Führen Sie ein shell-Befehl, wenn eine Datei Hinzugefügt wird
Habe ich einen Ordner namens Bilder auf meiner linux-box.
Dieser Ordner ist verbunden mit einer Webseite und den admin der Seite hat die Fähigkeit, Bilder hinzufügen, um diese Website. Allerdings, wenn Sie ein Bild Hinzugefügt, ich möchte einen Befehl ausführen vergrößern alle Bilder eines Verzeichnisses.
Kurz gesagt, ich möchte wissen, wie ich machen kann dass die server ausgeführt werden, einen bestimmten Befehl aus, wenn eine neue Datei Hinzugefügt wird, um eine bestimmte Position.
InformationsquelleAutor Cripto | 2012-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, wie die Leute das hochladen von Inhalten auf diesen Ordner, aber möchten Sie vielleicht etwas niedriger-tech-als überwachung der directory mit inotify.
Wenn das Protokoll ist FTP, und Sie haben Zugriff auf Ihren FTP-server logs, ich schlage vor, tailing, das log zu beobachten, die für den erfolgreichen uploads. Diese Art von event-triggered-Ansatz werden schneller, zuverlässiger und weniger Last, als eine polling-Ansatz mit traditionellen cron, und mehr tragbar und leichter zu Debuggen als etwas mit inotify.
Den Griff, wie Sie das wird, hängt natürlich von Ihrem FTP-server. Ich habe eine laufende vsftpd, deren Protokolle enthalten auch Zeilen wie diese:
Den
UPLOAD
Linie wird nur Hinzugefügt, wenn vsftpd hat erfolgreich die Datei gespeichert haben. Man könnte analysieren, diese in ein shell-Skript wie dieses:Wenn Sie einen HTTP-upload-tool, sehen Sie, wenn das tool eine text-Protokolldatei verwendet zum aufzeichnen der eingehenden Dateien. Wenn es nicht erwägen Sie irgendeine Art von logger-Funktion, so dass es dann produzieren, Protokolle, Sie können
tail
.Was ich hier nicht sehen, ist, was Sie tun, um trigger das Skript, dass die Schwänze der log-Datei.
Sind Sie vertraut mit
tail
's-F
option?man tail
für details. Die-F
Ursachentail
zu warten, bis die Datei wächst, dann senden Sie es an stdout. Also der "trigger" für den <pre>do something
</pre> das Teil ist einfach die Zugabe von neuen Inhalten in die Datei. Das Skript läuft einmal, vielleicht beim Start und läuft. Wie Sie starten, es ist bis zu Ihnen und hängt von Ihrem Betriebssystem oder Distribution.InformationsquelleAutor ghoti
Wie John, kommentierte der
inotify
API ist ein Ausgangspunkt, aber Sie könnten daran interessiert sein, einige tools, die diese API verwenden, um eine Datei-Benachrichtigung Aufgaben:Beispielsweise incron die verwendet werden können, zum ausführen von cron-ähnliche Aufgaben, wenn Datei-oder directory-änderungen erkannt werden.
Oder inotify-tools das ist ein Satz von Kommandozeilen-tools, die Sie verwenden können, bauen Sie Ihre eigenen Datei-Benachrichtigung shell-Skript.
Wenn man sich unten auf der Wiki-pake für die inotify-tools sehen Sie Verweise zu noch mehr tools und support für High-level-Sprachen wie Python, Perl oder Rubin (Beispielcode).
InformationsquelleAutor Casper
Vielleicht möchten Sie sich bei
inotify
InformationsquelleAutor John Lawrence
Mit ghotis Arbeit
Hier ist was ich getan habe, um die Benutzer freier Speicherplatz:
InformationsquelleAutor Kevin
Wenn sich die Datei über einen HTTP-upload, und wenn es dein server ist apache, möchten Sie vielleicht zu prüfen, mod_security.
Ermöglicht es Ihnen, ein Skript auszuführen für jeden upload über HTTP-POST.
InformationsquelleAutor arod
InformationsquelleAutor SiB