monit-general
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Multiple conditions on the RC of "check program" doesn't work (for m


From: Martin Pala
Subject: Re: Multiple conditions on the RC of "check program" doesn't work (for me)
Date: Thu, 10 May 2012 23:13:23 +0200

Hi Tomas,

the initial check program implementation supported only one status test - we have implemented support for multiple status tests, you can get the development snapshot here:
http://www.mmonit.com/tmp/monit-5.5_20120510.tar.gz

Example syntax:

    check program mytest with path "/usr/bin/mytest.sh"
       if status == 2 for 2 cycles then exec "/usr/local/bin/fix_script.sh"
       if status == 2 for 6 cycles then unmonitor
       if status == 10 then alert

Regards,
Martin


On Apr 20, 2012, at 2:53 PM, Tomas Nunez wrote:

Hi

I'm trying to check the RC of a program. If the RC is 2, I want it to exec a script that would allegedly fix the problem. But if after 3 attempts, the RC is still 2, then I want monit to stop trying.

So I put a check program like this:

check program check_program with path "check_program" every 6 cycles
   if status == 2 for 6 cycles then unmonitor
   if status == 2 for 2 cycles then exec "fix_script.sh"

Now I've found that I can have one or the other, not both. When I put both lines, just the latter applies:

#monit -v
Program Name          = check_program
 Path                 = /path/to/check_program
 Monitoring mode      = active
 Existence            = if does not exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
 Status               = if 'check_program' exit value = 2 within 600 seconds then exec 'fix_script.sh' timeout 0 cycle(s) else if succeeded 1 times within 1 cycle(s) then alert
 Every                = Check service every 6 cycles

And the other way around:

check program check_program with path "check_program" every 6 cycles
   if status == 2 for 2 cycles then exec "fix_script.sh"
   if status == 2 for 6 cycles then unmonitor

# monit -v
Program Name          = check_program
 Path                 = /path/to/check_program
 Monitoring mode      = active
 Existence            = if does not exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
 Status               = if 'check_program' exit value = 2 within 600 seconds then unmonitor else if succeeded 1 times within 1 cycle(s) then alert
 Every                = Check service every 6 cycles

It's strange because I have put conditions on the same value in other checks, and it works alright:

 check process apache with pidfile /var/run/httpd.pid
   start program = "/etc/init.d/httpd start" with timeout 60 seconds
   stop program  = "/etc/init.d/httpd stop"
   if cpu > 60% for 2 cycles then alert
   if cpu > 80% for 5 cycles then restart

# monit -v 
(...)
 CPU usage limit      = if greater than 80.0% 5 times within 5 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
 CPU usage limit      = if greater than 60.0% 2 times within 2 cycle(s) then alert else if succeeded 1 times within 1 cycle(s) then alert

What am I missing? 

Thanks in advance,

Tomàs

--
To unsubscribe:
https://lists.nongnu.org/mailman/listinfo/monit-general


reply via email to

[Prev in Thread] Current Thread [Next in Thread]