Frequently Asked Questions About mon

    1. Does "mon" require SATAN to run?

      No, it does not. SATAN includes the "fping" and "tcp_scan" utilities, which the fping, tcp, and telnet monitors used to use. The dependencies on these SATAN modules have since been removed. fping is available as a separate package from mon, and can be found on

    2. Where can I get everything that I need for "mon"?

    3. When I compile fping-2.2b1 under Linux, I get these errors:

      fping.c:216: conflicting types for sys_errlist
      /usr/include/stdio.h:221: previous declaration of sys_errlist
      make: *** [fping.o] Error 1
      Comment out line 221 in fping.c, since it's a re-declaration of an extern in stdio.h.

    4. When I run "mon" on Solaris, the daemon appears to start, but clients hang.

      Chances are mon hasn't started at all, and the clients are connecting to something running on the old mon port of 32777. Check /usr/adm/messages for a message from mon which says "Could not bind TCP server port".

      "mon" has been assigned a port of 2583 by the IANA. If you're running an older version of mon (0.37), then you should change the default port from 32777 to 2583 by editing the code in the server (change "$SERVPORT = 32777" to "$SERVPORT = 2583") and the clients.

    5. How do I get satan-1.1.1 to work under Linux?

      You need to apply the patches available from in order for satan to build and work properly. This is really worth doing, because fping is a huge win when you have a group that contains a large number of hosts.

    6. Where can I get QuickPage?

      QuickPage is freely available from .

    7. Is there a monitor for (insert service here)?

      Quite possibly. Check the mailing list archives, or the contrib area.

    8. Is mon Y2K compliant? How about Time::Period?

      All times are stored as time(2) values, which causes no problems with year 2000. All time calculations are done using these values (it would be much trouble to do them otherwise).

      Time::Period uses the same mechanism.

      For more information, see Year 2000 Compliance: Lawyers, Liars, and Perl

    9. When I run mon on RedHat 5.x, I get lots of syntax errors.

      The *.ph files generated by h2ph under RedHat 5.x (for Intel, at least) are broken. They have been fixed by Alan Robertson ([email protected]), and are included in his RPM of mon. This RPM is available from the main distribution site on

    10. When I run 'mon' on Linux/Redhat 5.0 it complains about "setlogsock"

      Redhat 5.0 comes with perl-5.004-1. The 'setlogsock' system call was added in perl-5.004-3. To solve this get perl-5.004-6.i386.rpm from the Redhat 5.1 distribution and upgrade with the command "rpm -Uh perl-5.004-6.i386.rpm".

    11. How do I send an alert only after a service has been down for more than n minutes?

      The "alertafter" parameter in a period definition can do (something like) this. For example:
          watch newkernel
      	    service telnet
      		interval 8m
      		monitor telnet.monitor
      		period wd {Sun-Sat}
      		    alert mail.alert mis
      		    alertafter 3 30m
      		    alertevery 2h
      This effectively means, "alert after 3 or more failures that happen within 30 minutes."

      In the case of pinging a host, here's a neat hack:

          watch hostgroup
      	    service fping
      		interval 6m
      		monitor fping.monitor -r 4 -t 60000
      		period wd {Sun-Sat}
      		    alert mail.alert mis
      		    alertevery 1h
      This makes fping return a failure for a host that doesn't answer in 4 pings, with 60 seconds between each ping.

    12. Can I include hostgroups inside of hostgroups?

          On Mon, 12 Jan 1998, Thomas Mike Michlmayr ([email protected]) wrote:
          > hi!
          > i'm trying to setup mon here at our department, and one of the features i'm
          > either missing or overlooking is the possibility to include hostgroups in
          > a hostgroup.
          > is this deliberatly, or just something noone thought of?
      This is deliberate. I've thought about it a good bit and I decided to not implement it in the mon config parser because it didn't make too much sense to me. The only function that sub-hostgroups would serve is essentially for clarity in the configuration file.

      To do what you want, it would be trivial to make an m4-based configuration, in which you define your hostgroups like this:

          define(`HOSTGROUP1',`host1 host2 host3')dnl
          define(`HOSTGROUP2',`host4 host5 host6')dnl
          hostgroup real_hostgroup HOSTGROUP1 HOSTGROUP2
      and just do "m4 >" and you will end up with this:

          hostgroup real_hostgroup host1 host2 host3 host4 host5 host6

    [email protected]