[Top][All Lists]

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

Re: Very simple monit of a perl file - how to do it?

From: EzCom Keith
Subject: Re: Very simple monit of a perl file - how to do it?
Date: Wed, 29 Dec 2010 12:29:02 -0800

On Wed, Dec 29, 2010 at 9:58 AM, Bruce B <address@hidden> wrote:
Seems that I solved the output problem and so my script is now ready for implementation in Monit. Let's move on to what happens when the server restarts and also what to put in monit.conf and how to test that monit works and re-spawns the program when needed.

Here is what I have in my daemon file:
start() {
        echo -n "Starting HoldReport:  "
        nohup perl /usr/src/holdReport/ & >> /dev/null
        sleep 2
stop() {
        echo -n "Stopping HoldReport: "
        kill `cat /var/log/`

Here is output of "ps aux" for the program:

root     11747  0.9  0.4  16572  9204 pts/1    S    12:55   0:00 perl /usr/src/holdReport/


On Wed, Dec 29, 2010 at 11:03 AM, Bruce B <address@hidden> wrote:
Thanks for the amazing details.

A- I have installed Monit using Yum Repository for CentOS and I can't locate the monitrc file but I have monit.conf and monit.d directory which is empty.

B- Here is the file I created for daemon but when I run the ./ start it hangs for ever. I know it's started already because I can see it in "ps aux" but it just hangs there. This was the exact same behavour when I run the file directly from the shell prompt as well. What is the work-around to this?

# description: Starts/stops HoldReport Recording program - Records duration of HOLD to SQL

start() {
        echo -n "Starting HoldReport:  "
        nohup perl /usr/src/holdReport/ >> /dev/null
        sleep 2
stop() {
        echo -n "Stopping HoldReport: "
        kill `cat /var/log/` 

# See how we were called.
case "$1" in
        echo $"Usage: holdreport {start|stop|restart}"

C- Now that I have a start/stop script what should go in my monit.conf file?


On Wed, Dec 29, 2010 at 2:27 AM, EzCom Keith <address@hidden> wrote:
On Tue, Dec 28, 2010 at 9:10 PM, Bruce B <address@hidden> wrote:
Thanks for the feedback. To clarify things:

I have a perl program named "" which runs fine if I simply run it like this at the shell level:

nohup perl /tmp/ >> /dev/null

Once above line is entered, the program creates a /var/log/ file which includes the PID of the program running and keeps doing the things I need it to do which is some report recording to SQL. So, I guess as you suggested I can run monit after running the program and have it monitor the PID file however I am not sure at all how to do it. Because all the examples have PROCESS in the first line and I don't think my simple program is a process like HTTP or others. Plus I don't have a START or STOP script for it. I only do "nohup" because I want it it to run if I am closing the terminal window and ">> /dev/null" is so there are no outputs on the screen.

I hope I am a bit more clear and I appreciate if you can give me a sample of what should go in the /etc/monit.conf.

In addition, I would appreciate it if you point me to monit.log (or whatever it's called) and also let me know what happens if the system is restarted? Should I expect Monit to start the program for me automatically?


On Tue, Dec 28, 2010 at 10:19 PM, EzCom Keith <address@hidden> wrote:
On Tue, Dec 28, 2010 at 3:22 PM, Bruce B <address@hidden> wrote:
Anything to this guys?


On Mon, Dec 27, 2010 at 9:57 PM, Bruce B <address@hidden> wrote:
Hi Everyone,

I am very new to monit. I have a perl program ( which should be running 24/7 and should re-spawn if it goes dead. Of course monit is the right tool for it but I have no clue how to use it.

Here is what I do to start the program each time:

nohup perl /usr/src/ >> /dev/null

The program actually creates a file with PID in it in /var/log/

I have the following so far in my /etc/monit.conf    ( I am running CentOS) and it doesn't seem to work. 

check process holdreport with pidfile /var/log/
   start program = "/usr/src/holdReport/"
   if 5 restarts within 5 cycles then timeout

And includes:
nohup perl /usr/src/ >> /dev/null

I would love to receive alerts to my gmail if program shuts down. Please enlighten me on that too.


To unsubscribe:

Sorry Bruce,

Not enough info for me to be much help. When you say "it doesn't seem to work", what does that mean, exactly?
I can assume that if you run sh /usr/src/holdReport/ from your shell, the script creates a pid file and
begins to do its job. So what happens when you request Monit to start monitoring? Does it do anything at all?
Can you post the relevant section of your Monit log? Best thing to do is (especially if this is the only process you
are attempting to monitor atm), rm -f your entire monit log. Manually start your perl script, then start monit. Check
the Monit webserver and note anything it says there regarding your script (also note if it does not even exist there).

Shut down Monit, and cat your monit log, copy/paste it to here.

As stated in an earlier thread, I used the 'wrapper' technique, outlined in the Monit FAQ, to successfully monitor
a PHP script that runs 24/7. It was surprisingly easy, and worked as advertised. Review that section, and see if
any of it can help you try a few things.

- Keith

To unsubscribe:

To unsubscribe:

Ok, lotta questions.. let's get the easy ones outta the way ; D

In your monitrc file, you can specify the monit logfile in this way:

set logfile /var/log/monit.log

Of course, your path and filename can be whatever you wish, but this is what's usual (I run CentOS as well).

Making a start/stop/restart (pretty much daemonizing) is also really simple. If you examine the files in your
/etc/rc.d/init.d directory, those are all generally daemon start stop scripts. Viewing some of the smaller files
will give you a quick tutorial. You can also Google for more information there if anything isn't clear. I would
suggest that you get your script daemonized in this way, and when you have it correct, you should be able
to start your process with:
/etc/rc.d/init.d/test start  (replace 'test' with whatever you used for your daemon file name)

You should then be able to do:
/etc/rc.d/init.d/test status
and the system should tell you 'test' is running, it's stopped. or it appears dead but PID exists.

You should also be able to do 'stop' and 'restart'. All of these commands will be in your daemon file once you
have it setup. Test them all from the prompt, and verify they all behave exactly as expected. If your .pl script
has a bang at the top (ex., #!/usr/bin/perl -qC [or whatever]), you can probably delete the .sh startup script period.

When that is working to your satisfaction, you might be able to figure out the rest of the stuff you'll need for your
monitrc, and if not, post back and we'll get that going.

As for your actual file, I have some questions (off topic to Monit, my apologies). When you say you don't want
output after you've left the terminal, does this script normally have output? If it does, are you aware of the screen
command? It allows you to run a process, detach it, and logout of your shell. You can log back in, and re-attach
to it at will. It will also capture output to a file if you might ever want to look backwards. If your script truly runs
completely blind, then I guess the way you're doing it will work. If you're satisfied that your script is running and
doing exactly as you want in the environment as you have it, then disregard this part... ; )

As far as what happens at system restart, we are getting way ahead of ourselves. Let's get your script running
as a service, and Monit monitoring it, and then move on from there.

- Keith

To unsubscribe:

To unsubscribe:

Ok, your monit.conf file should be in /etc

If you view that file, near the very end should be this line, uncommented (no # before it):
include /etc/monit.d/*

The usual way to control Monit is to leave the .conf file alone, and create a new file called monitrc in the /etc/monit.d
directory. It will be included when the monit.conf is read. When I say 'the usual way', it is meant as a way to communicate
with other Monit users for support questions. You will be referred to your monitrc file many times, so it's best for everyone
to be on the same page there.

There _might_ be a monitrc file already at that location, I forget whether or not it is created by the YUM pkg. If it is not
there, create it. Here is the minimum necessary to have in it. This will create the webserver, the monit log, and also begin
monitoring your holdreport service:

# Start monitrc
set daemon  60 with start delay 60
set logfile /var/log/monit.log
set httpd port 2812 and
     allow localhost
     allow xx.xx.xx.xx # I insert my home IP here
     allow <username>:<password>

check process holdreport with pidfile /var/log/
   #group Reports
   start program = "/etc/init.d/holdreport start"
   stop program = "/etc/init.d/holdreport stop"
   if 5 restarts within 5 cycles then timeout

Start and Stop program section, 'holdreport' is the assumed name you gave your daemon file. Edit that if it's wrong (you didn't specify).

Your PID file is told to be found in /var/log, but the usual place for PID files is /var/run. You should probably correct that for cleanliness.
If you change that in your file that creates the PID file, change the path in the monitrc above.

The set daemon command tells Monit to awaken every 60 secs and check the requested services. The start delay tells it to wait 60
seconds after initial startup before it begins checking any services. You can change those to your needs, they are just starting

The HTTP server will start, without SSL (you can add that later, once everything appears to be working). The allow list should be
self-explanatory. User and Pass are separated by a colon :

The group section is commented out, and is there for an example. If you have more than one type of report service in the future, you
can force those to be displayed in the web page as a group. Each monitored process with a same group name will be grouped
together for easier viewing.

If the service fails, Monit will try to restart it 5 times. If after 5 restarts it still cannot verify the service has restarted, it will stop
monitoring it (necessary to stop endless loops that might crash your server eventually, ie., something is VERY wrong).

Now then, start your service with your daemon command from your prompt. Verify it's running with 'status'.
Start Monit
Wait 60 seconds
Open a web browser and surf to your domain, adding :2812 at the end of the URL (ex., You should
be presented with a normal realm login prompt. Provide the user/pass you edited into the monitrc You should now be presented with
the Monit page, and hopefully everything is working.

If there are problems, do a cat /var/log/monit.log and see if it offers any insight.

May the Farce be with you... ; )

- Keith

reply via email to

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