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_file
nicht 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, wennrefresh
auf 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/2
eingestellt, 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) :: File
Erstellt 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) :: Bool
Hilfsfunktion für open_exclusive
, um zu entscheiden, ob eine pidfile veraltet ist.
FileWatching.Pidfile.isvalidpid
— Functionisvalidpid(hostname::String, pid::Cuint) :: Bool
Versuchen 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.