innwatch.ctl - control Usenet supervision by innwatch

     The file <config$_PATH_CTLWATCH> 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:

     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 a label for the  control  line.   It  is  used  as  an
     internal  state  indicator and in ctlinnd messages to control the server.
     If omitted, 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.

          This line matches if the current state is the specified ``label.''

          This line  matches  if  the  current  state  is  not  the  specified

     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).   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 directory, <config$_PATH_SPOOL>.

     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:

          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.

          Is identical to ``throttle'' except that the server is paused.

          Sends a ``shutdown'' command to the server.  It is for emergency use

          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 result 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 --
     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 ``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 action 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.

          @@@df .|awk 'NR==2 {print $4}'@lt@10000@throttle@No space
          @@@df -i .|awk 'NR==2 {print $4}'@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 df 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
     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
     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

     This file must be tailored for each individual site, the sample  supplied
     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.

     Written by <> for InterNetNews.  This is  revision  1.5,
     dated 1996/09/06.

     innd(8) , ctlinnd(8) , news.daily(8) .

You can find a summary and links related to this topic
as part of the Mib Software Usenet RKT.