INNWATCH.CTL(5) File Formats Manual INNWATCH.CTL(5)
NAME
innwatch.ctl - control Usenet supervision by innwatch
DESCRIPTION
The file <pathetc in inn.conf>/innwatch.ctl is used to determine what
actions are taken during the periodic supervisions by innwatch.
The file consists of a series of lines; blank lines and lines beginning
with a number sign (``#'') are ignored. All other lines consist of
seven fields, each preceded by a delimiting character, for example:
:label:state:condition:test:limit:command:reason
or
@label@state@condition@test@limit@command@reason
The delimiter can be any one of several non-alphanumeric characters
that does not appear elsewhere in the line; there is no way to quote it
to include it in any of the fields. Any of ``!'', ``,'', ``:'', ``@'',
``;'', or ``?'' is a good choice. Each line can have a different de-
limiter; the first character on each line is the delimiter for that
line. White space surrounding delimiters, except before the first, is
ignored, and does not form part of the fields; white space within
fields is permitted. All delimiters must be present.
The first field is a label for this control line. It is used as an in-
ternal state indicator and in ctlinnd messages to control the server.
If this field is empty, the line number is used.
The second field specifies when this control line should be used. It
consists of a list of labels and special indicators, separated by
whitespace. If the current state matches against any of the labels in
this field, this line will be used as described below. The values that
may be used are:
- This line matches if the current state is the same as the label
on this line, or if the current state is ``run'', the initial
state. This is also the default state if this field is empty.
+ This line matches if the current state is ``run''.
* This line always matches.
label This line matches if the current state is the specified ``la-
bel''.
-label This line matches if the current state is not the specified
``label''.
The third field specifies a shell command that is invoked if this line
matches. Do not use any shell filename expansion characters such as
``*'', ``?'', or ``['' (even quoted, they're not likely to work as in-
tended). If the command succeeds, as indicated by its exit status, it
is expected to have printed a single integer to standard output. This
gives the value of this control line, to be used below. If the command
fails, the line is ignored. The command is executed with its current
directory set to the news spool articles directory, <patharti-
cles in inn.conf>.
The fourth field specifies the operator to use to test the value re-
turned above. It should be one of the two letter numeric test opera-
tors defined in test(1) such as ``eq'', ``lt'' and the like. The lead-
ing dash (``-'') should not be included.
The fifth field specifies a constant with which to compare the value
using the operator just defined. This is done by invoking the command:
test value -operator constant
The line is said to ``succeed'' if it returns true.
The sixth field specifies what should be done if the line succeeds, and
in some cases if it fails. Any of the following words may be used:
throttle
Causes innwatch to throttle the server if this line succeeds.
It also sets the state to the value of the line's label. If the
line fails, and the state was previously equal to the label on
this line (that is, this line had previously succeeded), then a
go command will be sent to the server, and innwatch will return
to the ``run'' state. The ``throttle'' is only performed if the
current state is ``run'' or a state other than the label of this
line, regardless of whether the command succeeds.
pause Is identical to ``throttle'' except that the server is paused.
shutdown
Sends a ``shutdown'' command to the server. It is for emergency
use only.
flush Sends a ``flush'' command to the server.
go Causes innwatch to send a ``go'' command to the server and to
set the state to ``run''.
exit Causes innwatch to exit.
skip The remainder of the control file is skipped for the current
pass.
The last field specifies the reason that is used in those ctlinnd com-
mands that require one. More strictly, it is part of the reason -- in-
nwatch appends some information to it. In order to enable other sites
to recognize the state of the local innd server, this field should usu-
ally be set to one of several standard values. Use ``No space'' if the
server is rejecting articles because of a lack of filesystem resources.
Use ``loadav'' if the server is rejecting articles because of a lack of
CPU resources.
Once innwatch has taken some action as a consequence of its control
line, it skips the rest of the control file for this pass. If the ac-
tion was to restart the server (that is, issue a ``go'' command), then
the next pass will commence almost immediately, so that innwatch can
discover any other condition that may mean that the server should be
suspended again.
EXAMPLES
@@@inndf .@lt@10000@throttle@No space
@@@inndf -i .@lt@1000@throttle@No space (inodes)
The first line causes the server to be throttled if the free space
drops below 10000 units (using whatever units inndf(8) uses), and
restarted again when free space increases above the threshold.
The second line does the same for inodes.
The next three lines act as a group and should appear in the following
order. It is easier to explain them, however, if they are described
from the last up.
!load!load hiload!loadavg!lt!5!go!
:hiload:+ load:loadavg:gt:8:throttle:loadav
/load/+/loadavg/ge/6/pause/loadav
The final line causes the server to be paused if innwatch is in the
``run'' state and the load average rises to, or above, six. The state
is set to ``load'' when this happens. The previous line causes the
server to be throttled when innwatch is in the ``run'' or ``load''
state, and the load average rises above eight. The state is set to
``hiload'' when this happens. Note that innwatch can switch the server
from ``paused'' to ``throttled'' if the load average rises from below
six to between six and seven, and then to above eight. The first line
causes the server to be sent a ``go'' command if innwatch is in the
``load'' or ``hiload'' state, and the load average drops below five.
Note that all three lines assume a mythical command loadavg that is as-
sumed to print the current load average as an integer. In more practi-
cal circumstances, a pipe of uptime into awk is more likely to be use-
ful.
BUGS
This file must be tailored for each individual site, the sample sup-
plied is truly no more than a sample. The file should be ordered so
that the more common problems are tested first.
The ``run'' state is not actually identified by the label with that
three letter name, and using it will not work as expected.
Using an ``unusual'' character for the delimiter such as ``('', ``*'',
``&'', ```'', ``''', and the like, is likely to lead to obscure and
hard to locate bugs.
HISTORY
Written by <kre@munnari.oz.au> for InterNetNews. This is revision
5909, dated 2002-12-03.
SEE ALSO
inn.conf(5), innd(8), inndf(8), ctlinnd(8), news.daily(8).
INNWATCH.CTL(5)