fswait

fswait is a utility for blocking on the observation of a filesystem event for a path with a timeout. The primary use-case for this is in system startup scripts that depend on the existence of some file or directory that will be created by another system service or job.


Keywords
bsd3, program, command-line, haskell
License
BSD-3-Clause
Install
cabal install fswait-1.1.0

Documentation

Welcome!

Build Status

fswait is a utility for blocking on the observation of a filesystem event for a path with a timeout.

This is useful when you need to block the execution of a separate program on the creation (or some other filesystem event) of a filepath but you want that block constrained by a timeout.

A common use-case is in systemd services, some daemons may need a socket or some other file to exist before starting and it is common to write shell code to implement that check-and-wait-with-timeout.

This tool makes that pattern more easily expressed as a command line utility call that also supports observing many different filesystem events for the specified path.

$ fswait --path /etc/someconfig.ini --modify --create && echo 'Do something!'
observing Create Modify for /home/parnell/Desktop/test.sh
the window for an observation is 120s
Created {isDirectory = False, filePath = "someconfig.ini"}
Do something!

When an observation occurs, the utility will return immediately with an exit code of 0 and print the observed event.

If the timeout window is reached without an observation occurring, an exit code of 1 is returned.

$ fswait --help
Wait and observe events on the filesystem for a path, with a timeout

Usage: fswait [--timeout Seconds] --path FILEPATH [--exists] (--access |
              --modify | --attrib | --close | --closeWrite | --closeNoWrite |
              --open | --move | --moveIn | --moveOut | --moveSelf | --create |
              --delete | --onlyDir | --noSymlink | --maskAdd | --oneShot |
              --all) ([--access]... | [--modify]... | [--attrib]... |
              [--close]... | [--closeWrite]... | [--closeNoWrite]... |
              [--open]... | [--move]... | [--moveIn]... | [--moveOut]... |
              [--moveSelf]... | [--create]... | [--delete]... | [--onlyDir]... |
              [--noSymlink]... | [--maskAdd]... | [--oneShot]... | [--all]...)

Available options:
  -h,--help                Show this help text
  --timeout Seconds        Window to observe a filesystem event (default: 120s,
                           negative values wait indefinitely)
  --path FILEPATH          Observe filesystem events for path
  --exists                 Return immediately if the filepath already exists

Installing

If you have Nix you can install it using:

$ nix-env --install --attr fswait release.nix