NAME

     innwatch.ctl - control Usenet supervision by innwatch


DESCRIPTION

     The file /usr/local/news/etc/innwatch.ctl is used to  deter-
     mine 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 del-
     imiting character:
          :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 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 indica-
     tors, 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
          ``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).  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 exe-
     cuted with its current  directory  set  to  the  news  spool
     directory, /news.

     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 follow-
     ing 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  com-
          mand 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 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 arti-
     cles 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.


EXAMPLES

          @@@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
          /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  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

     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.


HISTORY

     Written by <kre@munnari.oz.au> for  InterNetNews.   This  is
     revision 1.5, dated 1996/09/06.


SEE ALSO

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




























Man(1) output converted with man2html