File Events
FileWatching.poll_fd — Functionpoll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)Überwacht einen Dateideskriptor fd auf Änderungen der Lese- oder Schreibverfügbarkeit, mit einem Timeout, das durch timeout_s Sekunden gegeben ist.
Die Schlüsselwortargumente bestimmen, welcher Lese- und/oder Schreibstatus überwacht werden soll; mindestens eines von ihnen muss auf true gesetzt sein.
Der zurückgegebene Wert ist ein Objekt mit den booleschen Feldern readable, writable und timedout, die das Ergebnis des Pollings angeben.
FileWatching.poll_file — Functionpoll_file(path::AbstractString, interval_s::Real=5.007, timeout_s::Real=-1) -> (previous::StatStruct, current)Überwachen Sie eine Datei auf Änderungen, indem Sie alle interval_s Sekunden abfragen, bis eine Änderung auftritt oder timeout_s Sekunden vergangen sind. Der interval_s sollte eine lange Periode sein; der Standardwert beträgt 5,007 Sekunden.
Gibt ein Paar von Statusobjekten (previous, current) zurück, wenn eine Änderung erkannt wird. Der previous Status ist immer ein StatStruct, kann jedoch alle Felder auf null gesetzt haben (was darauf hinweist, dass die Datei zuvor nicht existierte oder nicht zugänglich war).
Das current Statusobjekt kann ein StatStruct, ein EOFError (was darauf hinweist, dass die Zeitüberschreitung abgelaufen ist) oder eine andere Unterklasse von Exception sein (wenn der stat-Vorgang fehlgeschlagen ist - zum Beispiel, wenn der Pfad nicht existiert).
Um festzustellen, wann eine Datei geändert wurde, vergleichen Sie current isa StatStruct && mtime(prev) != mtime(current), um eine Benachrichtigung über Änderungen zu erkennen. Es wird jedoch empfohlen, watch_file für diesen Vorgang zu verwenden, da es zuverlässiger und effizienter ist, obwohl es in einigen Situationen möglicherweise nicht verfügbar ist.
FileWatching.watch_file — Functionwatch_file(path::AbstractString, timeout_s::Real=-1)Überwacht die Datei oder das Verzeichnis path auf Änderungen, bis eine Änderung auftritt oder timeout_s Sekunden vergangen sind. Diese Funktion pollt das Dateisystem nicht, sondern verwendet plattformspezifische Funktionen, um Benachrichtigungen vom Betriebssystem zu erhalten (z. B. über inotify unter Linux). Siehe die unten verlinkte NodeJS-Dokumentation für Details.
Der zurückgegebene Wert ist ein Objekt mit den booleschen Feldern renamed, changed und timedout, die das Ergebnis der Überwachung der Datei angeben.
Dieses Verhalten dieser Funktion variiert leicht zwischen den Plattformen. Siehe https://nodejs.org/api/fs.html#fs_caveats für detailliertere Informationen.
FileWatching.watch_folder — Functionwatch_folder(path::AbstractString, timeout_s::Real=-1)Überwacht eine Datei oder ein Verzeichnis path auf Änderungen, bis eine Änderung aufgetreten ist oder timeout_s Sekunden vergangen sind. Diese Funktion pollt das Dateisystem nicht, sondern verwendet plattformspezifische Funktionen, um Benachrichtigungen vom Betriebssystem zu erhalten (z. B. über inotify unter Linux). Siehe die unten verlinkte NodeJS-Dokumentation für weitere Details.
Dies wird weiterhin Änderungen für path im Hintergrund verfolgen, bis unwatch_folder für dasselbe path aufgerufen wird.
Der zurückgegebene Wert ist ein Paar, bei dem das erste Feld der Name der geänderten Datei ist (sofern verfügbar) und das zweite Feld ein Objekt mit den booleschen Feldern renamed, changed und timedout ist, die das Ereignis angeben.
Dieses Verhalten dieser Funktion variiert leicht zwischen den Plattformen. Siehe https://nodejs.org/api/fs.html#fs_caveats für detailliertere Informationen.
FileWatching.unwatch_folder — Functionunwatch_folder(pfad::AbstractString)Stoppen Sie die Hintergrundverfolgung von Änderungen für pfad. Es wird nicht empfohlen, dies zu tun, während eine andere Aufgabe darauf wartet, dass watch_folder für denselben Pfad zurückkehrt, da das Ergebnis unvorhersehbar sein kann.
Pidfile
Ein einfaches Dienstprogramm zum Erstellen von Beratungs-Pidfiles (Sperrdateien).
Primary Functions
FileWatching.Pidfile.mkpidlock — Functionmkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
mkpidlock(at::String, proc::Process; kwopts...)Erstellt eine pidfile-Sperre für den Pfad "at" für den aktuellen Prozess oder den Prozess, der durch pid oder proc identifiziert wird. Kann eine Funktion annehmen, die einmal nach dem Sperren ausgeführt wird, zur Verwendung in do-Blöcken, nach denen die Sperre automatisch geschlossen wird. Wenn die Sperre fehlschlägt und wait falsch ist, wird ein Fehler ausgelöst.
Die Sperre wird entweder durch close, einen finalizer oder kurz nach dem Verlassen von proc freigegeben. Stellen Sie sicher, dass der Rückgabewert bis zum Ende des kritischen Abschnitts Ihres Programms lebendig bleibt, damit der finalizer ihn nicht vorzeitig zurückgewinnt.
Optionale Schlüsselwortargumente:
mode: Dateizugriffsmodus (modifiziert durch die Prozess-Umask). Standardmäßig auf weltweit lesbar.poll_interval: Geben Sie die maximale Zeit zwischen den Versuchen an (wennwatch_filenicht funktioniert)stale_age: Löschen Sie eine vorhandene pidfile (unter Ignorierung der Sperre), wenn sie älter ist als diese viele Sekunden, basierend auf ihrer mtime. Die Datei wird nicht gelöscht, bis sie 5x länger als dies ist, wenn die pid in der Datei zu erscheinen scheint, als könnte sie gültig sein. Oder 25x länger, wennrefreshauf 0 überschrieben wird, um das Aktualisieren der Sperre zu deaktivieren. Standardmäßig ist dies deaktiviert (stale_age= 0), aber ein typischer empfohlener Wert wäre etwa 3-5x eine geschätzte normale Abschlusszeit.refresh: Hält eine Sperre davon ab, veraltet zu werden, indem die mtime in jedem Zeitintervall, das vergeht, aktualisiert wird. Standardmäßig ist dies aufstale_age/2eingestellt, was der empfohlene Wert ist.wait: Wenn wahr, blockieren, bis wir die Sperre erhalten, wenn falsch, Fehler auslösen, wenn die Sperre fehlschlägt.
FileWatching.Pidfile.trymkpidlock — Functiontrymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)Wie mkpidlock, außer dass es false zurückgibt, anstatt zu warten, wenn die Datei bereits gesperrt ist.
Diese Funktion erfordert mindestens Julia 1.10.
Base.close — Methodclose(lock::LockMonitor)Gibt einen pidfile-Lock frei.
Helper Functions
FileWatching.Pidfile.open_exclusive — Functionopen_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: FileErstellt eine neue Datei für Lese-Schreib-Beratungs-exklusive Zugriffe. Wenn wait false ist, wird ein Fehler ausgegeben, wenn die Sperrdateien existieren, andernfalls wird blockiert, bis wir die Sperre erhalten.
Für eine Beschreibung der Schlüsselwortargumente siehe mkpidlock.
FileWatching.Pidfile.tryopen_exclusive — Functiontryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}Versuchen Sie, eine neue Datei für den Lese-Schreib-Zugriff mit exklusiver Beratung zu erstellen. Geben Sie nichts zurück, wenn sie bereits existiert.
FileWatching.Pidfile.write_pidfile — Functionwrite_pidfile(io, pid)Schreibe unser pidfile-Format in einen offenen IO-Descriptor.
FileWatching.Pidfile.parse_pidfile — Functionparse_pidfile(file::Union{IO, String}) => (pid, hostname, age)Versuchen Sie, unser pidfile-Format zu parsen, wobei ein Element durch (0, "", 0.0) ersetzt wird, wenn ein Lesevorgang fehlschlägt.
FileWatching.Pidfile.stale_pidfile — Functionstale_pidfile(path::String, stale_age::Real, refresh::Real) :: BoolHilfsfunktion für open_exclusive, um zu entscheiden, ob eine pidfile veraltet ist.
FileWatching.Pidfile.isvalidpid — Functionisvalidpid(hostname::String, pid::Cuint) :: BoolVersuchen Sie, konservativ zu schätzen, ob pid eine gültige Prozess-ID ist.
Base.Filesystem.touch — MethodBase.touch(::Pidfile.LockMonitor)Aktualisiert die mtime des Locks, um anzuzeigen, dass er noch aktuell ist.
Siehe auch das refresh-Schlüsselwort im mkpidlock Konstruktor.