File Events
FileWatching.poll_fd
— Functionpoll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)
Monitorea un descriptor de archivo fd
para cambios en la disponibilidad de lectura o escritura, y con un tiempo de espera dado por timeout_s
segundos.
Los argumentos de palabra clave determinan cuál de los estados de lectura y/o escritura debe ser monitoreado; al menos uno de ellos debe estar configurado en true
.
El valor devuelto es un objeto con campos booleanos readable
, writable
y timedout
, que dan el resultado de la encuesta.
FileWatching.poll_file
— Functionpoll_file(path::AbstractString, interval_s::Real=5.007, timeout_s::Real=-1) -> (previous::StatStruct, current)
Monitorea un archivo en busca de cambios mediante sondeos cada interval_s
segundos hasta que ocurra un cambio o transcurran timeout_s
segundos. El interval_s
debe ser un período largo; el valor predeterminado es de 5.007 segundos.
Devuelve un par de objetos de estado (previous, current)
cuando se detecta un cambio. El estado previous
es siempre un StatStruct
, pero puede tener todos los campos en cero (indicando que el archivo no existía previamente o no era accesible anteriormente).
El objeto de estado current
puede ser un StatStruct
, un EOFError
(indicando que se agotó el tiempo de espera), o algún otro subtipo de Exception
(si la operación stat
falló - por ejemplo, si la ruta no existe).
Para determinar cuándo se modificó un archivo, compara current isa StatStruct && mtime(prev) != mtime(current)
para detectar la notificación de cambios. Sin embargo, usar watch_file
para esta operación es preferible, ya que es más confiable y eficiente, aunque en algunas situaciones puede no estar disponible.
FileWatching.watch_file
— Functionwatch_file(path::AbstractString, timeout_s::Real=-1)
Observa el archivo o directorio path
en busca de cambios hasta que ocurra un cambio o transcurran timeout_s
segundos. Esta función no sondea el sistema de archivos y, en su lugar, utiliza funcionalidades específicas de la plataforma para recibir notificaciones del sistema operativo (por ejemplo, a través de inotify en Linux). Consulta la documentación de NodeJS vinculada a continuación para más detalles.
El valor devuelto es un objeto con campos booleanos renamed
, changed
y timedout
, que indican el resultado de la observación del archivo.
Este comportamiento de esta función varía ligeramente entre plataformas. Consulta https://nodejs.org/api/fs.html#fs_caveats para obtener información más detallada.
FileWatching.watch_folder
— Functionwatch_folder(path::AbstractString, timeout_s::Real=-1)
Observa un archivo o directorio path
en busca de cambios hasta que ocurra un cambio o transcurran timeout_s
segundos. Esta función no sondea el sistema de archivos y, en su lugar, utiliza funcionalidades específicas de la plataforma para recibir notificaciones del sistema operativo (por ejemplo, a través de inotify en Linux). Consulte la documentación de NodeJS vinculada a continuación para obtener más detalles.
Esto continuará rastreando cambios para path
en segundo plano hasta que se llame a unwatch_folder
en el mismo path
.
El valor devuelto es un par donde el primer campo es el nombre del archivo cambiado (si está disponible) y el segundo campo es un objeto con campos booleanos renamed
, changed
y timedout
, que indican el evento.
Este comportamiento de esta función varía ligeramente entre plataformas. Consulte https://nodejs.org/api/fs.html#fs_caveats para obtener información más detallada.
FileWatching.unwatch_folder
— Functionunwatch_folder(path::AbstractString)
Detener el seguimiento en segundo plano de los cambios para path
. No se recomienda hacer esto mientras otra tarea está esperando que watch_folder
devuelva en la misma ruta, ya que el resultado puede ser impredecible.
Pidfile
Una herramienta de utilidad simple para crear archivos pid de asesoramiento (archivos de bloqueo).
Primary Functions
FileWatching.Pidfile.mkpidlock
— Functionmkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
mkpidlock(at::String, proc::Process; kwopts...)
Crea un bloqueo de pidfile para la ruta "at" para el proceso actual o el proceso identificado por pid o proc. Puede tomar una función para ejecutar una vez bloqueado, para su uso en bloques do
, después de lo cual el bloqueo se cerrará automáticamente. Si el bloqueo falla y wait
es falso, se lanzará un error.
El bloqueo se liberará ya sea por close
, un finalizer
, o poco después de que proc
salga. Asegúrate de que el valor de retorno esté vivo hasta el final de la sección crítica de tu programa, para que el finalizer
no lo recupere demasiado pronto.
Argumentos opcionales:
mode
: modo de acceso al archivo (modificado por la máscara de usuario del proceso). Por defecto es legible por todos.poll_interval
: Especifica el tiempo máximo entre intentos (siwatch_file
no funciona)stale_age
: Elimina un pidfile existente (ignorando el bloqueo) si es más antiguo que esta cantidad de segundos, basado en su mtime. El archivo no se eliminará hasta 5x más que esto si el pid en el archivo parece que puede ser válido. O 25x más sirefresh
se anula a 0 para deshabilitar la actualización del bloqueo. Por defecto, esto está deshabilitado (stale_age
= 0), pero un valor típico recomendado sería alrededor de 3-5x un tiempo de finalización normal estimado.refresh
: Mantiene un bloqueo de volverse obsoleto actualizando el mtime cada intervalo de tiempo que pasa. Por defecto, esto se establece enstale_age/2
, que es el valor recomendado.wait
: Si es verdadero, bloquea hasta que obtengamos el bloqueo; si es falso, lanza un error si el bloqueo falla.
FileWatching.Pidfile.trymkpidlock
— Functiontrymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)
Como mkpidlock
excepto que devuelve false
en lugar de esperar si el archivo ya está bloqueado.
Esta función requiere al menos Julia 1.10.
Base.close
— Methodclose(lock::LockMonitor)
Libera un bloqueo de archivo pid.
Helper Functions
FileWatching.Pidfile.open_exclusive
— Functionopen_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File
Crea un nuevo archivo para acceso exclusivo de lectura-escritura por asesoría. Si wait
es false
, entonces genera un error si los archivos de bloqueo existen; de lo contrario, bloquea hasta que obtengamos el bloqueo.
Para una descripción de los argumentos de palabra clave, consulta mkpidlock
.
FileWatching.Pidfile.tryopen_exclusive
— Functiontryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}
Intenta crear un nuevo archivo para acceso exclusivo de lectura-escritura, devuelve nada si ya existe.
FileWatching.Pidfile.write_pidfile
— Functionwrite_pidfile(io, pid)
Escriba nuestro formato de pidfile en un descriptor de IO abierto.
FileWatching.Pidfile.parse_pidfile
— Functionparse_pidfile(file::Union{IO, String}) => (pid, hostname, age)
Intenta analizar nuestro formato de pidfile, reemplazando un elemento con (0, "", 0.0), respectivamente, para cualquier lectura que falló.
FileWatching.Pidfile.stale_pidfile
— Functionstale_pidfile(path::String, stale_age::Real, refresh::Real) :: Bool
Función auxiliar para open_exclusive
para decidir si un pidfile está obsoleto.
FileWatching.Pidfile.isvalidpid
— Functionisvalidpid(hostname::String, pid::Cuint) :: Bool
Intenta estimar de manera conservadora si pid es un identificador de proceso válido.
Base.Filesystem.touch
— MethodBase.touch(::Pidfile.LockMonitor)
Actualiza el mtime
en el bloqueo, para indicar que sigue siendo reciente.
Consulta también la palabra clave refresh
en el constructor mkpidlock
.