QER(8) QER(8)
NAME
qer, runq - queue management for spooled files
SYNOPSIS
qer [ -q subdir ] [ -f file ] root tag reply args
runq [ -adsER ] [ -f file ] [ -q subdir ] [ -l load ] [ -t
time ] [ -r nfiles ] [ -n nprocs ] root cmd
DESCRIPTION
Qer creates a control and a data file in a queue directory.
The control file contents consist of the tag, reply, and
args separated by spaces. The data file contains the stan-
dard 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 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 executing the
command cmd with the contents of the control file as its
arguments, the contents of the data file as its standard
input, and standard 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
`Retry', 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 algo-
rithm is used: a data file younger than one hour will not be
Page 1 Plan 9 (printed 10/26/25)
QER(8) QER(8)
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 paral-
lel; 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
/bin/upas/runq -a /mail/queue /mail/lib/remotemail
The entry must be a single line; it is folded here only so
it fits on the page.
FILES
root/user queue directory for user
root/user/D.XXXXXX data file
root/user/C.XXXXXX control file
root/user/E.XXXXXX error file
root/user/[F-Z].XXXXXX secondary data files
Page 2 Plan 9 (printed 10/26/25)
QER(8) QER(8)
SOURCE
/sys/src/cmd/upas/q
SEE ALSO
mail(1)
Page 3 Plan 9 (printed 10/26/25)