Provided by: inn2_2.7.3-1_amd64 bug

NAME

       innwatch.ctl - List of supervisory actions taken by innwatch

DESCRIPTION

       The file pathetc/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:

           !state!when!condition!test!limit!command!reason

       or:

           @state@when@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 delimiter; 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 the state to enter if the condition for this control line is true.  It is used as an
       internal 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 states and
       special indicators, separated by whitespace.  If the current state matches against any of the states 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 "label".

       "-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
       intended).   The  command is executed with its current directory set to the news spool articles directory
       (patharticles).

       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 fourth field specifies the operator to use to test the value returned above.  It should be one of the
       two  letter  numeric test operators defined in test(1) such as "eq", "lt" and the like.  The leading 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 "ctlinnd go" command will be sent to the
           server, and innwatch will return to  the  "run"  state.   The  "ctlinnd  throttle"  command  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 via the "ctlinnd pause" command.

       "shutdown"
           Sends a "ctlinnd shutdown" command to the server.  It is for emergency use only.

       "flush"
           Sends a "ctlinnd flush" command to the server.

       "go"
           Causes innwatch to send a "ctlinnd 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"  commands  that  require  one.   More
       strictly, it is part of the reason, as innwatch appends some information to it.

       In order to enable other sites to recognize the state of the local innd server, this field should usually
       be  set  to  one  of  several  standard  values.   Use for instance "No space" if the server is rejecting
       articles because of a lack of filesystem resources, or "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 action was to restart the server  (that  is,  issue  a  "ctlinnd  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 (spool)
           !!! 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 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 ! loadav
           : hiload : + load : loadavg : gt : 8 : throttle : loadav
           / load / + / loadavg / gt / 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
       "pause" to "throttle" 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 "ctlinnd 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 assumed to print the  current  load
       average  as  an integer.  In more practical circumstances, a pipe of uptime into AWK is more likely to be
       useful.

BUGS

       The "run" state is not actually identified by the label with that three letter name, and  using  it  will
       not work as expected ("go" is the wanted state in that case).

       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.  Rewritten into POD by Julien Elie.

SEE ALSO

       ctlinnd(8), inndf(8), news.daily(8), rc.news(8).

INN 2.7.3                                          2025-05-19                                    INNWATCH.CTL(5)