We're using Monit to check our web servers. When the check fails (or succeeds) the corresponding compontent on a status page is updated via a shell script like this:

check host web-a-https with address web-a.company.local
  if failed
    port 443
    protocol https
    request /ping.php
    content = "OK"
    with ssl options {verify: enable}
  then exec "/usr/local/sbin/statuspage/[COMPONENT]-partial"
    ELSE IF recovered THEN EXEC "/usr/local/sbin/statuspage/[COMPONENT]-up"

Now we have a situation where we want to set the compontent status to "Major Outage" if web-a-https and web-b-https BOTH are down.

I figured this might be possible with dependencies and tried this:

check program demo-group with path /bin/true
  depends on web-a-https, web-b-https
  if status == 0 then exec '/usr/local/sbin/statuspage/[COMPONENT]-up'
  if status == 1 then exec '/usr/local/sbin/statuspage/[COMPONENT]-down'

I figured that the service would only be monitored if both dependencies are up and the test (which is always true) passes. That doesn't work at all because the down events of the web-a-https, web-b-https do not seem to be propagated to the "top level".

I tried setting a start/stop command for the group service, but that doesn't work either.

Is there a way to do this in monit, or do I have to build some shell script glue to make this happen?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.