fswatch
ist ein Dateiänderungsmonitor, der Benachrichtigungen empfängt, wenn der Inhalt der angegebenen Dateien oder Verzeichnisse geändert wird. fswatch
implementiert mehrere Monitore:
stat (2)
verwendet werden kann). fswatch
sollte auf jedem System, das eine der oben genannten APIs bereitstellt, ordnungsgemäß funktionieren und funktionieren.
fswatch
ist ein Frontend von libfswatch
, einer Bibliothek mit C- und C++-Anbindung. Weitere Informationen zu libfswatch
finden Sie hier.
Die Hauptfunktionen fswatch
sind:
Die Einschränkungen von fswatch
hängen weitgehend vom verwendeten Monitor ab:
Der FSEvents- Monitor, der nur auf macOS verfügbar ist, weist keine bekannten Einschränkungen auf und lässt sich sehr gut mit der Anzahl der beobachteten Dateien skalieren.
Für den File Events Notification Monitor, der auf Solaris-Kernels und seinen Derivaten verfügbar ist, sind keine Einschränkungen bekannt.
Der kqueue- Monitor, der auf jedem *BSD-System mit kqueue verfügbar ist, erfordert, dass für jede überwachte Datei ein Dateideskriptor geöffnet wird. Infolgedessen skaliert dieser Monitor schlecht mit der Anzahl der beobachteten Dateien und kann zu Fehlfunktionen führen, sobald dem fswatch
Prozess die Dateideskriptoren ausgehen. In diesem Fall gibt fswatch
für jede Datei, die nicht geöffnet werden kann, einen Fehler im Standardfehler aus.
Beim Inotify- Monitor, der unter Linux seit Kernel 2.6.13 verfügbar ist, kann es zu einem Warteschlangenüberlauf kommen, wenn Ereignisse schneller generiert werden, als sie aus der Warteschlange gelesen werden. In jedem Fall erhält die Anwendung garantiert eine Überlaufbenachrichtigung, die für eine ordnungsgemäße Wiederherstellung behandelt werden kann. fswatch
löst derzeit eine Ausnahme aus, wenn ein Warteschlangenüberlauf auftritt. Zukünftige Versionen werden den Überlauf durch die Ausgabe geeigneter Benachrichtigungen bewältigen.
Der Windows -Monitor kann nur Verzeichnisse überwachen, keine Dateien. Um eine Datei zu überwachen, muss ihr übergeordnetes Verzeichnis überwacht werden, um Änderungsereignisse für alle untergeordneten Verzeichnisse rekursiv in beliebiger Tiefe zu empfangen. Optional können Änderungsereignisse gefiltert werden, um nur Änderungen an der gewünschten Datei einzuschließen.
Der auf jeder Plattform verfügbare Poll -Monitor ist zur Ausführung seiner Aufgabe nur auf die verfügbare CPU und den verfügbaren Speicher angewiesen. Die Leistung dieses Monitors nimmt linear mit der Anzahl der angezeigten Dateien ab.
Anwendungsempfehlungen lauten wie folgt:
Verwenden Sie unter macOS nur den FSEvents
-Monitor (das ist das Standardverhalten).
Verwenden Sie unter Solaris und seinen Derivaten den Monitor „File Events Notification“ .
Verwenden Sie unter Linux den inotify
Monitor (das ist das Standardverhalten).
Wenn die Anzahl der zu beobachtenden Dateien ausreichend klein ist, verwenden Sie den kqueue
-Monitor. Beachten Sie, dass auf manchen Systemen die maximale Anzahl der Dateideskriptoren, die von einem Prozess geöffnet werden können, auf einen sehr niedrigen Wert eingestellt ist (Werte bis zu 256 sind keine Seltenheit), auch wenn das Betriebssystem möglicherweise einen viel größeren Wert zulässt. Überprüfen Sie in diesem Fall die Dokumentation Ihres Betriebssystems, um diesen Grenzwert entweder pro Prozess oder systemweit zu erhöhen.
Überwachen Sie nach Möglichkeit Verzeichnisse statt Dateien. Durch die ordnungsgemäße Gestaltung der Empfangsseite der Ereignisse für den Umgang mit Verzeichnissen kann der Ressourcenverbrauch des Monitors erheblich reduziert werden.
Verwenden Sie unter Windows den windows
-Monitor.
Wenn keiner der oben genannten Punkte zutrifft, verwenden Sie den Umfragemonitor. Die Erfahrung der Autoren zeigt, dass fswatch
etwa 150 MB RAM-Speicher benötigt, um eine Hierarchie von 500.000 Dateien mit einer minimalen Pfadlänge von 32 Zeichen zu überwachen. Ein häufiger Engpass des Poll-Monitors ist der Festplattenzugriff, da stat()
-Erstellen einer großen Anzahl von Dateien sehr viel Zeit in Anspruch nehmen kann. In diesem Fall sollte die Latenz auf einen ausreichend großen Wert eingestellt werden, um den Leistungsabfall, der durch häufige Festplattenzugriffe entstehen kann, zu reduzieren.
Ein normaler Benutzer kann fswatch
möglicherweise aus dem Paketmanager Ihres Betriebssystems oder einem eines Drittanbieters abrufen. Wenn Sie nach fswatch
für macOS suchen, können Sie es entweder mit MacPorts oder Homebrew installieren:
# MacPorts
$ port install fswatch
# Homebrew
$ brew install fswatch
Unter FreeBSD kann fswatch
mit pkg installiert werden:
# pkg install fswatch-mon
Überprüfen Sie Ihren bevorzugten Paketmanager und teilen Sie uns mit, ob fswatch
dort fehlt.
Ein Benutzer, der fswatch
erstellen möchte, sollte einen Release-Tarball erhalten. Ein Release-Tarball enthält alles, was ein Benutzer benötigt, um fswatch
auf seinem System zu erstellen, indem er die Anweisungen im Installationsabschnitt unten und in der INSTALL
Datei befolgt.
Ein Entwickler, der fswatch
ändern möchte, sollte die Quellen erhalten (entweder aus einem Quell-Tarball oder durch Klonen des Repositorys) und das GNU Build System auf seinem Computer installiert haben. Bitte lesen Sie README.gnu-build-system
um weitere Details zum Bootstrap von fswatch
aus Quellen auf Ihrem Computer zu erhalten.
Es wird nicht empfohlen, eine Kopie des Quell-Repositorys zu erhalten, es sei denn, Sie sind Entwickler, haben das GNU Build System auf Ihrem Computer installiert und wissen, wie man es auf den Quellen bootet.
Ausführliche Informationen zum Konfigurieren und Installieren fswatch
finden Sie in der INSTALL
Datei. Da fswatch
dynamische Bibliotheken erstellt und verwendet, müssen Sie auf einigen Plattformen möglicherweise zusätzliche Aufgaben ausführen, bevor Sie fswatch
verwenden können:
Stellen Sie sicher, dass das Installationsverzeichnis dynamischer Bibliotheken ( $PREFIX/lib
) in den Suchpfaden des dynamischen Linkers Ihres Betriebssystems enthalten ist. Der Standardpfad /usr/local/lib
funktioniert in fast jedem Betriebssystem.
Möglicherweise müssen die Links und der Cache zu den dynamischen Bibliotheken aktualisiert werden. In GNU/Linux-Systemen müssen Sie möglicherweise ldconfig
ausführen:
$ ldconfig
fswatch
ist ein C++-Programm und zum Kompilieren ist ein C++-Compiler erforderlich, der dem C++11-Standard entspricht. Informationen zur Installation der C++-Toolchain und der C++-Laufzeit finden Sie in der Dokumentation Ihres Betriebssystems.
Für die Konfiguration und Installation fswatch
sind keine weiteren Softwarepakete oder Abhängigkeiten erforderlich, außer den oben genannten APIs, die von den Dateisystemmonitoren verwendet werden.
fswatch
stellt die folgende Dokumentation bereit:
Die offizielle Dokumentation fswatch
wird im Texinfo-Format bereitgestellt. Dies ist die umfassendste Informationsquelle über fswatch
und die einzig verlässliche. Insbesondere die Manpage ist ein Stub, der dem Benutzer vorschlägt, stattdessen die Infoseite zu verwenden.
Wenn Sie fswatch
mit einem Paketmanager installieren und möchten, dass das PDF-Handbuch im Paket gebündelt wird, senden Sie bitte eine Funktionsanfrage an den Paketbetreuer.
fswatch
ist lokalisierbar und verwendet intern GNU gettext
um lokalisierbare Zeichenfolgen von ihrer Übersetzung zu entkoppeln. Die derzeit verfügbaren Gebietsschemas sind:
en
).it
).es
). Um fswatch
mit Lokalisierungsunterstützung zu erstellen, muss gettext
auf Ihrem System installiert sein. Wenn configure
nicht finden kann oder der Linker libintl
nicht finden kann, müssen Sie möglicherweise manuell den Speicherort für configure
angeben, normalerweise mithilfe der Variablen CPPFLAGS
und LDFLAGS
. Ein Beispiel finden Sie README.macos
.
Wenn gettext
auf Ihrem System nicht verfügbar ist, wird fswatch
ordnungsgemäß erstellt, es fehlt jedoch die Lokalisierungsunterstützung und das einzige verfügbare Gebietsschema ist Englisch.
fswatch
akzeptiert eine Liste von Pfaden, für die Änderungsereignisse empfangen werden sollen:
$ fswatch [options] ... path-0 ... path-n
Der Ereignisstrom wird auch dann erstellt, wenn einer der Pfade noch nicht vorhanden ist. Wenn sie nach dem Start von fswatch
erstellt werden, werden Änderungsereignisse ordnungsgemäß empfangen. Abhängig vom verwendeten Watcher werden neu erstellte Pfade überwacht, nachdem die konfigurierte Latenz abgelaufen ist.
Die Ausgabe von fswatch
kann zur weiteren Verarbeitung an ein anderes Programm weitergeleitet werden:
$ fswatch -0 path | while read -d "" event
do
// do something with ${event}
done
Um einen Befehl auszuführen, wenn eine Reihe von Änderungsereignissen auf der Standardausgabe ausgegeben werden, aber keine Ereignisdetails erforderlich sind, kann der folgende Befehl verwendet werden:
$ fswatch -o path | xargs -n1 -I{} program
Das Verhalten stimmt mit früheren Versionen von fswatch
(v. 0.x) überein. Weitere Informationen finden Sie im Abschnitt „Kompatibilitätsprobleme mit fswatch v. 0.x“ .
Standardmäßig wählt fswatch
hinsichtlich Leistung und Ressourcenverbrauch den besten Monitor aus, der auf der aktuellen Plattform verfügbar ist. Wenn der Benutzer einen anderen Monitor angeben möchte, kann die Option -m
verwendet werden, um den Monitor nach Namen anzugeben:
$ fswatch -m kqueue_monitor path
Die Liste der verfügbaren Monitore kann mit der Option -h
abgerufen werden.
Weitere Informationen finden Sie in der fswatch
Dokumentation.
Jeder ist willkommen, einen Beitrag zu fswatch
zu leisten. Weitere Informationen finden Sie CONTRIBUTING
.
Fehlerberichte können direkt an die Autoren gesendet werden.
Der Autor kann im IRC über den Freenode-Kanal #fswatch
kontaktiert werden.
Diese Software ist unter der GPL v. 3.0 und der Apache-Lizenz v. 2.0 doppelt lizenziert.
Copyright (c) 2013-2021 Enrico M. Crisostomo
Dieses Programm ist freie Software; Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weiterverbreiten und/oder ändern; entweder Version 3 oder (nach Ihrer Wahl) eine spätere Version.
Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich ist, jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Einzelheiten finden Sie in der GNU General Public License.
Sie sollten zusammen mit diesem Programm eine Kopie der GNU General Public License erhalten haben. Wenn nicht, siehe http://www.gnu.org/licenses/.