qer, runq - queue management for spooled files
SYNOPSISqer [ -q subdir ] [ -f file ] root tag reply args
runq [ -adsER ] [ -f file ] [ -q subdir ] [ -l load ] [ -t time ] [ -r
nfiles ] [ -n nprocs ] root cmd
Qer creates a control and a data file in a queue directory. The con‐
trol file contents consist of the tag, reply, and args separated by
spaces. The data file contains the standard input to qer. The files
are created in the directory root/subdir, where subdir is the argument
to -q if present, else the contents of /dev/user. The names of the
control and data files differ only in the first character which is `C'
and `D' respectively. Mktemp(2) is used to create the actual names of
the control and data file.
Some commands, such as fax (see telco(4)), must queue more files than
just the data file. Each file following a -f flag is copied into the
queue directory. The names of the copies differ from the name of the
data file only in the first character. The first one is starts with
'F', the second 'G', etc.
Runq processes the files queued by qer. Without the -a option, runq
processes all requests in the directory root/subdir, where subdir is
the argument to -q if present, else the contents of /dev/user. With
the -a it processes all requests. Each request is processed by execut‐
ing the command cmd with the contents of the control file as its argu‐
ments, the contents of the data file as its standard input, and stan‐
dard error appended to the error file E.XXXXXX.
The action taken by runq depends on the return status of cmd. If cmd
returns a null status, the processing is assumed successful and the
control, data, and error files are removed. If cmd returns an error
status containing the word the files are left to be reprocessed at a
later time. For any other status, an error message is mailed to the
requester and the files are removed. Runq uses the reply field in the
control file as a mail address to which to send an error notification.
The notification contains the contents of the control file to identify
the failed request.
To avoid reprocessing files too often, the following algorithm is used:
a data file younger than one hour will not be processed if its error
file exists and was last modified within the preceding 10 minutes. A
data file older than one hour will not be processed if its error file
exists and was last modified within the preceding hour. The -E flag
causes all files to be reprocessed regardless of the file times.
The -R flag instructs runq never to give up on a failed queue job,
instead leaving it in the queue to be retried.
The -d option causes debugging output on standard error describing the
progress through the queues.
The -t flags specifies the number of hours that retries will continue
after a send failure. The default is 48 hours.
The -r flag limits the number of files that are processed in a single
pass of a queue. Runq accumulates the entire directory containing a
queue before processing any files. When a queue contains many files
and the system does not have enough memory, runq exits without making
progress. This flag forces runq to process the directory in chunks,
allowing the queue to be drained incrementally. It is most useful in
combination with the -q flag.
The -s, -n, and -l flags are only meaningful with the -a flag. They
control amount of parallelism that is used when sweeping all of the
queues. The argument following the -n flag specifies the number of
queues that are swept in parallel; the default is 50. The argument
following the -l flag specifies the total number of queues that are
being swept. By default, there is no limit. The number of active
sweeps is cumulative over all active executions of runq. The -s flag
forces each queue directory to be processed by exactly one instance of
runq. This is useful on systems that connect to slow external systems
and prevents all the queue sweeps from piling up trying to process a
few slow systems.
Runq is often called from cron(8) by an entry such as
0,10,20,30,40,50 * * * * kremvax
runq -a /mail/queue /mail/lib/remotemail
The entry must be a single line; it is folded here only so it fits on
queue directory for user
secondary data files