Provided by: postpone_0.2_amd64 bug

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                               POSTPONE(1)