• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 335
  • Last Modified:

Shell script that will alert

I have a script that runs every 10 minutes that looks at a log file. Its not working as I would like. Can you tell me what I'm doing wrong?

In Log:
You would see Completed successfully in which case I want script to shoot me a message.
If there is a failure you would see failed in log which I want it to shoot me a message.
If neither, please dont shoot me a message (process would still be running in which I dont need alert).

Currently I get a message saying completed successfully and when I check it hasnt completed. Im guessing I have it scripted in a way that it will shoot me that alert regardless? Please assist.

failmsg=`tail -6 $1 |grep -i FAILED`
if [[ $? = 0 ]];then
mail -s "Failed... please check..." #@vtext.com < /dev/null
fi

runmsg=`tail -6 $1 |grep -i Completed Successfully`
if [[ $? != 0 ]];then
mail -s "Completed.." #@vtext.com < /dev/null
fi

Open in new window

0
k3vsmith
Asked:
k3vsmith
  • 8
  • 6
1 Solution
 
Dan CraciunIT ConsultantCommented:
Don't know if that's the issue, but I always used grep with "" or ''.

grep -i "Completed Successfully"
0
 
k3vsmithAuthor Commented:
ok I can try that.
Do I need to add in any verbage that if it finds neither to do nothing?
0
 
Dan CraciunIT ConsultantCommented:
Nope.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
k3vsmithAuthor Commented:
That didnt send an alert.
For the line you suggested I change I changed like this:
runmsg=`tail -6 $1 |grep -i "Completed Successfully"`


Is that what you meant?
0
 
Dan CraciunIT ConsultantCommented:
Yes.

If you run that line directly, what's the output?

I mean
tail -6 your.log | grep -i "Completed Successfully"
0
 
k3vsmithAuthor Commented:
That shows me the line where it says Completed Successfully
0
 
k3vsmithAuthor Commented:
So does that mean in the script possibly get rid of the single quotes?
So:
runmsg=`tail -6 $1 |grep -i "Completed Successfully"`
to:
runmsg= tail -6 $1 |grep -i "Completed Successfully"
0
 
Dan CraciunIT ConsultantCommented:
Then that command was a success, and $? is 0.

You're sending an email only when $? is not 0
0
 
Dan CraciunIT ConsultantCommented:
Did you copy that script from somewhere? Cause it doesn't make much sense to assign a value to a variable (runmsg) and then forget about it...

The reason you were getting that email before was that because you were using an incorrect syntax for grep (unknown parameters because you had a space), it returned an error code.
0
 
k3vsmithAuthor Commented:
Oh opps! Haha good catch. That worked. Thanks for your help!
0
 
k3vsmithAuthor Commented:
No I just am still learning to script and was trying to hash something out rather than checking my log every so often when I run this process.
0
 
Dan CraciunIT ConsultantCommented:
I would test if that works even before the text "completed" is in the log. I would think it will send you an email regardless of if the text is present or no, just because an empty result is a valid result of grep so $? should always be 0.

I would try something like:
runmsg=`tail -6 $1 |grep -i "Completed Successfully"`
if [[ runmsg != '' ]];then
mail -s "Completed.." #@vtext.com < /dev/null
fi

Open in new window

0
 
k3vsmithAuthor Commented:
Oh ok I see what your saying. Let me try that...
0
 
k3vsmithAuthor Commented:
Ok so I kicked off process and there would be no fail or successfully in log and ran script. I got no alert. So it must be ok..
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 8
  • 6
Tackle projects and never again get stuck behind a technical roadblock.
Join Now