|-||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, theyre 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 articles directory, <patharticles in inn.conf>.|
|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 lines 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.|
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.
@@@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 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.
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 <email@example.com> for InterNetNews. This is revision 5909, dated 2002-12-03.