NAME
postpone - schedules a command to be executed later when a lockfile
disappears
SYNOPSIS
postpone [-dfv] [-lwLoO FILE] command args ...
DESCRIPTION
Postpone schedules a command to be executed later when a lockfile
disappears. Intended usage is when a command is executed possibly
multiple times, but running once is sufficient. This happens in
maintainer scripts of Debian packages, for example, the menu system
will need to run update-menus every time a menu file is installed or
removed, but if several packages are processed at once, a single
update-menus run at the end is sufficient. In fact, postpone is a
generalization of similar code found in update-menus that is already
able to postpone itself. Another prominent use case are TeX packages
that need to rebuild several indices.
On startup, postpone will look if any of the lock files given with
--wait exists. If not, it will run command immediately in foreground.
Otherwise, it will fork to background, waiting for the lock file(s) to
disappear. At the same time, the --lock file is created to indicate to
other postpone instances that command is already scheduled for
execution; the other instances will exit without further action.
Additionally, --extra-lock will be acquired just before the execution
of command, this allows the serialization of several (different)
background jobs.
All lockfiles are optional. See below for examples.
OPTIONS
-w FILE or --wait FILE
Wait for FILE before running command. Can be given several
times. This activates the main feature of postpone -- delay
execution until some other task has exited (specifically,
released its fcntl() lock).
-l FILE or --lock FILE
Creates lockfile FILE. If postpone is called again with the same
FILE, it will exit, assuming the task is already postponed. Make
sure that the (effects of the) commands are the same for the
same lockfile.
-L FILE or --extra-lock FILE
Before running command, acquire lock on FILE. Use this to
serialize several (most likely different) postponed commands.
-d or --debian
Equivalent to --wait /var/lib/dpkg/lock --extra-lock
/var/lib/dpkg/postpone.lock. Meant for use in maintainer scripts
of Debian packages, will wait for dpkg and apt-get to exit and
serialize the postponed commands.
-o FILE or --output FILE
Redirect stdout and stderr output to FILE when running in
background. (Discarded otherwise.) If FILE ends with "XXXXXX",
mkstemp is used.
-O FILE or --all-output FILE
Like --output, but always redirect stdout and stderr output to
FILE.
-f or --foreground
Do not detach while waiting for locks.
-v or --verbose
Verbose output. Repeat for debugging output.
--help Print options summary and exit.
--version
Print version information and exit.
--version-string
Print version information in machine readable form and exit.
EXAMPLES
Example usage in a texlive postinst maintainer script:
if [ -x /usr/bin/postpone ] ; then
postpone --verbose --lock /var/run/updmap-sys.lock --debian \
--all-output /tmp/updmap.XXXXXXXX \
updmap-sys
else
updmap-sys
fi
FILES
/var/lib/dpkg/lock
Dpkg’s default lockfile.
/var/lib/dpkg/postpone.lock
Default extra lockfile when running with --debian.
BUGS
Postpone currently only uses fcntl() to acquire locks on --wait, usage
with applications using flock() will fail gracefully. (The command will
run immediately.) --lock and --extra-lock use flock().
COMPATIBILITY
For compatibility, using unknown options does not abort the program.
Applications can use --version-string if they need to compare the
postpone version number.
SEE ALSO
update-menus(1), fcntl(2), flock(2), mkstemp(3), dpkg(1).
COPYRIGHT
Copyright (C) 2007 Christoph Berg
Based on code from:
Debian menu system -- update-menus
update-menus/update-menus.cc
Copyright (C) 1996-2003 Joost Witteveen
Copyright (C) 2002-2004 Bill Allombert and Morten Brix Pedersen
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
June 9th 2007