[Top][All Lists]

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

Re: How to output stdout and stderr from an exec program script in monit

From: Russell Simpkins
Subject: Re: How to output stdout and stderr from an exec program script in monit
Date: Mon, 8 Feb 2016 18:13:17 -0500

So, you want to log the errors AND have them show up in the output, put your logic into a script:

#!/bin/env bash
rval=$(/usr/bin/python /home/user/ >> /home/user/test.log 2>&1)
if [[ $rval ~= 0 ]]; then
   tail -n 10 /home/user/test.log
   exit $rval
exit 0

So, in the script above, we attempt to run the python script and check the return value. If it's non zero, write the last 10 lines of test.log to stdout and exit with the non-zero exit code.

If you're better with python, you could also open a single file for stdout and stderr e.g.

import sys
f = open('/home/user/test.log', 'w')
o = sys.stdout
sys.stdout = f
sys.stderr = f

# do some work using python and check if
# something bad happened, when that happens we want to log it

message = "Something bad happened"
print message

# switch stdout back, write message to stdout and exit
sys.stdout = o
print message


On Mon, Feb 8, 2016 at 4:59 PM, Vikram Kone <address@hidden> wrote:
I tried this, and it now logs the stdout and stderr correctly in the log file. But the problem is, the output from python script is no longer being sent in the alert email body

check program mytest with path "/bin/bash -c '/usr/bin/python /home/user/ >> /home/user/test.log 2>&1'"
      if status != 0 then alert

The alert email just says "'/bin/bash' failed with exit status (1) -- no output"

I want to see the python script stderr message here ie "Value Error ..".

How do I do this?

On Mon, Feb 8, 2016 at 1:18 PM, Russell Simpkins <address@hidden> wrote:
Try creating a simple bash script and then make the check run your bash script 

check program my_program with path "/usr/local/bin/" ....

That way you can make sure that it's not the monit check creating issues.

/usr/bin/python -u user > /var/log/mylogs 2>&1

You can then execute the bash script to verify your logs are getting written.

On Mon, Feb 8, 2016 at 4:10 PM, Vikram Kone <address@hidden> wrote:
yes, it works when I run the python command directly from shell.
but when I do 

$> monit start my_program

I don't see the log file being created

On Mon, Feb 8, 2016 at 12:22 PM, Russell Simpkins <address@hidden> wrote:
I created

raise ValueError("throwing up")

I ran it by running 

$> python > /dev/null 2>&1
$> echo $?

Not sure what else you might be doing wrong

On Mon, Feb 8, 2016 at 3:13 PM, Vikram Kone <address@hidden> wrote:
For testing it I simply did this in the python script

raise ValueError("throwing up")

On Mon, Feb 8, 2016 at 10:39 AM, Russell Simpkins <address@hidden> wrote:

You don't show your python. Are you using "exit(1)" in your python when there is an error condition?
You need to exit(1) or something other than zero.


On Mon, Feb 8, 2016 at 1:06 PM, Vikram Kone <address@hidden> wrote:
I have a python script that I use as to check certain system conditions to alert on using monit.
This script prints a buch of stuff during execution to stdout which I want to capture in a log file.
How should I configure the monit conf script, such that I can capture both the stdout and stderr of this script and at the same time alerting on the exit status of the script. The monit alert should also included the stdout/stderr for the alert events.

This is what I tried


check program my_program with path "/usr/bin/python -u /opt/program/ > my_prgoram.log 2&>1"
 if status !=0 alert

But I see that the monit always thinks that the program is reporting status=0 even when then it exists with error code 1.

What am i doing wrong?

To unsubscribe:

To unsubscribe:

To unsubscribe:

To unsubscribe:

To unsubscribe:

To unsubscribe:

To unsubscribe:

reply via email to

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