command-line programs to safely lock and unlock files and mailboxes (via liblockfile).
add an example, a script, a trick and tips
Locking a file during a lengthy process:
lockfile-touch /some/file &
# Save the PID of the lockfile-touch process
>"$logfile" 2>&1; then
: # all is well
provides a set a programs that can be used to lock and
unlock mailboxes and files safely (via liblockfile):
- lock the current user’s mailbox
mail-unlock - unlock the current user’s
mail-touchlock - touch the lock on the current
- lock a given file
lockfile-remove - remove the lock on a given file
lockfile-touch - touch the lock on a given file
lockfile-check - check the lock on a given
By default, the
filename argument refers to the name of the file to
be locked, and the name of the lockfile will be
filename .lock. However, if the
--lock-name argument is specified, then
filename will be taken as the name of the lockfile
Each of the
mail locking commands attempts to lock
/var/spool/mail/<user>, where <user> is the name
associated with the effective user ID, as determined by via
Once a file is
locked, the lock must be touched at least once every five
minutes or the lock will be considered stale, and subsequent
lock attempts will succeed. Also see the
--use-pid option and the
lockfile-check command tests whether or not a
valid lock already exists.
Suppress any output. Success or
failure will only be indicated by the exit status.
Enable diagnostic output.
Do not append .lock to the
filename. This option applies to
lockfile-touch, or lockfile-check.
Write the parent process id
(PPID) to the lockfile whenever a lockfile is created, and
use that pid when checking a lock’s validity. See the
lockfile_create(3) manpage for more information. This
option applies to lockfile-create and
lockfile-check. NOTE: this option will not work
correctly between machines sharing a filesystem.
Touch the lock and exit
immediately. This option applies to
lockfile-touch and mail-touchlock.
When not provided, these commands will run forever, touching
the lock once every minute until killed.
Try to lock filename
retry-count times before giving up. Each attempt
will be delayed a bit longer than the last (in 5 second
increments) until reaching a maximum delay of one minute
between retries. If retry-count is unspecified,
the default is 9 which will give up after 180 seconds (3
minutes) if all 9 lock attempts fail.
For lockfile-check this indicates that a valid lock
exists, otherwise it just indicates successful program execution.
For lockfile-check a non-zero exit status indicates that
the specified lock does not exist or is not valid. For other
programs it indicates that some problem was encountered.
Written by Rob