Operating System - HP-UX
1752422 Members
5544 Online
108788 Solutions
New Discussion юеВ

Re: crontab to send alert only once

 
SOLVED
Go to solution
Raynald Boucher
Super Advisor

Re: crontab to send alert only once

Add a date tag to your flag file name like "touch /tmp/
Denver Osborn
Honored Contributor

Re: crontab to send alert only once

You could also use current epoch and if the diff between the last alert and current alert are > 86400 secs, clear your lock file and send another alert.

To get the epoch with perl...

perl -e 'print time'

If you're comfortable with perl, write your alert script in perl... if not, then write it in shell and use the perl to set a variable.

here's an example to get you started... you can put this into a function which gets called when your alert condition exists. If the lapse between the current alert and last alert are > 86400 second (24hrs) it can send another alert.

-----

typeset -i ALERTED NOW DIFF LAPSE
LOCK=/tmp/mylock.file # your lock file
LAPSE=86400 # min seconds between alerts
NOW=$(perl -e 'print time')
ALERTED=$(cat ${LOCK} 2>/dev/null)

# diff between last alert time and now
DIFF=$((NOW - ALERTED))

if [ ${DIFF} -gt ${LAPSE} ];then
# send your alert and update lock file
commands to send your alert
echo ${NOW} > ${LOCK}
fi

-----

Hope this helps,
-denver
DeafFrog
Valued Contributor

Re: crontab to send alert only once

Hi Steve , Steven , TTr , Raynald and Denver ,

Many thanks for the input ,here's how i am able to manage it as of now,
====================

a=`cat /tmp/value1`
when=`date | cut -c 5-16`
echo $when
echo $a
b=`/usr/local/bin/lsof -i tcp:21414 | grep -v "^COMMAND"| wc -l`
if [ "$a" -lt "$b" ]
then
c=`expr $b - $a`
echo $c
mailx -s"Number of process on 192.168.83.2:21414 has been increased by $c at $when " mathewsml@infinity.hcl.com < /dev/null
a=$b
echo $a > /tmp/value1
elif [ "$a" -gt "$b" ];then
d=`expr $a - $b`
mailx -s"Number of process on 192.168.83.2:21414 has been decreased by $d at $when " mathewsml@infinity.hcl.com < /dev/null
echo $b > /tmp/value1
elif [ "$a" -eq "$b" ]
then
echo $b > /tmp/value1
fi
FrogIsDeaf
Steve Post
Trusted Contributor

Re: crontab to send alert only once

I assume you know this. But maybe not? So here you go.

Here is the $when line rewritten.
when=$(date +"%b %d %H:%M")

I'm only worried about May being a 3 digit month vs 4 digits for June. The %b will give you a 3 digit month.

You could redo it to 17May2010_08:30
when=$(date +"%d%b%Y_%H:%M")

Now even though I picking on a line of your code, It's great. I'd already copied it.

Steve