basic server check script - help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting basic server check script - help
# 1  
Old 12-29-2011
basic server check script - help

Hello Fellow bash enthusiasts...

I am stuck on this local script and could use some fresh eyes on this code.
Code:
#!/bin/bash
MAIL_ME="jj@uberdork.com"
MAIL_SUBJECT="Norveld_Server_needs_attention"
SERVER_DATE=$(TZ=PST8PDT date)
echo $(ServerTZ=PST8PDT date) - Web Server Check = $(curl -Is http://xxx.xxx.xxx.xxx | \grep -E '^Server' | cut -c9-) >> /home/jj/Documents/cirrhus9/Accounts/Norveld/3WeekTest/norveld.test
if [ $? -eq 0 ] ; then
 exit 0
 else
 if [ $? -eq 1 ] ; then
 echo "Norveld_Server_Check - FAILED" on $SERVER_DATE | mail $MAIL_ME -s $MAIL_SUBJECT
 exit 1
 fi
 fi
done
#EOF

PING IS NOT AN OPTION'
Server when it's borked will ping,
but be unresponsive, so I ask the Webserver what software it's using with
Code:
curl -Is http://xxx.xxx.xxx.xxx | \grep -E '^Server' | cut -c9-

which returns "Microsoft-IIS/7.5" and works even if the server is unresponsive through usual means.

This runs under my cron every minute.
There's only 1 problem, server has been up/down for awhile and I NEVER get an email.

Code:
telnet xxx.xxx.xxx.xxxx 80

is an option, but I have zero experience with how to handle the response from the server. or
Code:
wget xxx.xxx.xxx.xxx/index.html


Whatever method I use to check for responsiveness, I have to get an email
as the desired email address.

local: GNU bash, version 4.1.10(1)-release (i586-suse-linux-gnu)
Remote: Windows Server 2008 R2 (64bit) with IIS.

Thanks.

Happy New Year!

Last edited by Habitual; 12-29-2011 at 11:25 AM..
# 2  
Old 12-29-2011
A very happy new year to you too!! Smilie

Well, it's obvious why you never got E-mail 'cause you are actually checking the exit status of echo command which is giving 0 and the first if block gets executed.

Plus I do not understand why you used extra done and fi. Anyways, below is the code I wouls used for the same purpose (I have not tested it though Smilie). See if this works for you:

Code:
#!/bin/bash
MAIL_ME="jj@uberdork.com"
MAIL_SUBJECT="Norveld_Server_needs_attention"
SERVER_DATE=$(TZ=PST8PDT date)

# store this in a variable
temp=$(curl -Is http://xxx.xxx.xxx.xxx | \grep -E '^Server' | cut -c9-)
echo $(ServerTZ=PST8PDT date) - Web Server Check = $temp >> /home/jj/Documents/cirrhus9/Accounts/Norveld/3WeekTest/norveld.test

if [ $temp='Microsoft-IIS/7.5' ] ; then
 exit 0
else
 echo "Norveld_Server_Check - FAILED" on $SERVER_DATE | mail $MAIL_ME -s $MAIL_SUBJECT
 exit 1
fi

This User Gave Thanks to admin_xor For This Post:
# 3  
Old 12-29-2011
MySQL

admin_xor;

"echo always returns zero" is the rule I was looking for, when I couldn't even think of it!
I have implemented your suggested code, but /home/jj/Documents/cirrhus9/Accounts/Norveld/3WeekTest/norveld.test had an apache entry. A typo probably prevented the email from being sent.

The extra "fi" was probably a bad hack at some ! logic snippet I had since removed... I dunno, I tend to "hack now, debug during-run" (complete with "set -x" statement.)

Since this post, I reviewed Chapter 6 of "Linux Shell Script Programming" by Todd Meadors - Copyright 2003) where it illustrated a clue...
Code:
dir1=`pwd`

on Page 215

I will change some detail in your code and watch the inbox!

Thanks for the code and have a Prosperous New Year.

Edit:
Changed temp=$(curl -Is http://xxx.xxx.xx.xx | \grep -E '^Server' | cut -c9-) for 7 passes and no email. (I used the wrong IP)...
Code:
Thu Dec 29 14:32:01 EST 2011 - Web Server Check = Apache
Thu Dec 29 14:33:02 EST 2011 - Web Server Check = Apache
Thu Dec 29 14:34:01 EST 2011 - Web Server Check = Apache
Thu Dec 29 14:35:01 EST 2011 - Web Server Check = Apache
Thu Dec 29 14:36:01 EST 2011 - Web Server Check = Apache


subscribed with interest...

Last edited by Habitual; 12-29-2011 at 03:42 PM..
# 4  
Old 12-29-2011
The correction idea in post #2 contains a basic scripting error:
Quote:
if [ $temp='Microsoft-IIS/7.5' ] ; then
There are no spaces either side of the equals sign. This is not a syntax error BUT the "if" will always return "true" regardless of the value of $temp. Also get into he habit of putting string variables in quotes.
Try:
Code:
if [ "$temp" = 'Microsoft-IIS/7.5' ] ; then

However, this will still only work if the value of $temp is the exact matching string. The sample posted does not give this fact away.
These 2 Users Gave Thanks to methyl For This Post:
# 5  
Old 12-29-2011
Well I tested the script neither before nor after the modifications!! Smilie It's just the long time C programming and shell scripting which drove me to the conclusion!!

I haven't really tested what apache (or probably IIS since you are using Windows 2008 R2) web server returning to the curl query. I just read your post and and modified the your script just enough to give you an idea!!! Smilie

Enjoy the new year!!
# 6  
Old 12-30-2011
Tools

Thanks methyl and admin_xor:

As usual "YMMV"... Smilie

anyway, does this make any difference?

Code:
+ temp=$'Microsoft-IIS/7.5\r'

the \r is what stands out...

JJ

Edit:

I also tried
Code:
...
if [ "$temp" = "Microsoft-IIS/7.5\r" ] ; then
..

---------- Post updated at 05:27 PM ---------- Previous update was at 04:33 PM ----------

I get variations on this using "set -x"...

Code:
echo Thu Dec 29 12:52:01 PST 2011 - Web Server Check = $'Microsoft-IIS/7.5\r'
+ [[ Microsoft-IIS/7.5^M = \\\M\\\i\\\c\\\r\\\o\\\s\\\o\\\f\\\t\\\-\\\I\\\I\\\S\\\/\\\7\\\.\\\5\\\\\r ]]

but I am having limited success with this code ...
Code:
if [ $temp = "Microsoft-IIS/7.5\r" ] ; then
 echo "Norveld_Server_Check - FAILED" on $LOCAL_DATE | mail $MAIL_ME -s $MAIL_SUBJECT
 exit 0
fi

The if logic is "backwards"?
This doesn't fire an email when run manually, but does via cron.

I might have to export some stuff. Smilie

Some days, I'm sure I don't know diddly about my chosen occupation.

Thanks.

Edit:
It's completely NORMAL for cron to send email so I suppressed those with
Code:
> /dev/null 2>&1

Thanks for "listening".
Sometimes we just have to reach out and ask.

---------- Post updated at 10:15 PM ---------- Previous update was at 05:27 PM ----------

another method, maybe?

Code:
#!/bin/bash
# http://bashscripts.org/forum/viewtopic.php?f=16&t=1522
# set -x
MAIL_ME="jj"
MAIL_SUBJECT="Norveld_Server_needs_attention"
SERVER_DATE=$(TZ=PST8PDT date +%c)
LOCAL_DATE=$(date +%c)

# store this in a variable
IIS=$(curl -Is http://xxx.xxx.xxx.xxx | \grep -E '^Server' | cut -c9-21)
echo $(TZ=PST8PDT date) - Web Server Check = "$IIS" # >> /home/jj/Documents/cirrhus9/Accounts/Norveld/3WeekTest/norveld.test

if [ "$IIS" = "Microsoft-IIS" ] ; then
exit 0
else
 echo "Norveld_Server_Check - FAILED" on "$LOCAL_DATE" | mail "$MAIL_ME" -s "$MAIL_SUBJECT"
 exit 1
fi

the rubber-hits-the-road at
Code:
curl -Is http://xxx.xxx.xxx.xxx | \grep -E '^Server' | cut -c9-21

which leaves off the "/7.5" of the string "Microsoft-IIS/7.5"
NOW I can compare "$IIS" to "Microsoft-IIS"...?

fingers are crossed.

Thanks.

---------- Post updated 12-30-11 at 01:46 PM ---------- Previous update was 12-29-11 at 10:15 PM ----------

I tested my script manually 103 times yesterday and finally settled on the current script.

HNY - 1d

Last edited by Habitual; 12-29-2011 at 06:44 PM..
# 7  
Old 12-30-2011
Hmm. The Microsoft output contains a carriage-return character which messes up your string comparison (carriage-return = ctrl/M = ^M = \r in some programs but not I'm afraid in raw Shell). The "\r" is just a display but not the actual character.

To get rid of the carriage-return, insert this "tr" in your pipeline at the appropriate place (after "curl"). The "tr" program does recognise "\r" as meaning carriage-return.
Code:
          | tr -d '\r' |


Yes the space either side of the equals sign does make an important difference. As does the double quotes round the string variable. The syntax has to be exact for the "if" statement to work properly.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script to check server-name and come out

Hello, I am not efficient in script, so need some help to create a small script. I have file, which have list of all IPs. All those IPs can be connected from a gateway server with "sudo ssh 10.63.xx.xx". We do not have reverse lookup for IPs, so I want script to login to each server, return... (1 Reply)
Discussion started by: solaris_1977
1 Replies

2. Shell Programming and Scripting

Help with shell script to check the tcp network connectivity between server

Hello, I have a requirement to check the tcp network connectivity between server it's running on and the list of host's and ports combination. i have written the below code but it doesn't work, but when i execute the nc command outside the script it works fine. please help me where i am... (8 Replies)
Discussion started by: sknovice
8 Replies

3. Shell Programming and Scripting

*ix script to check port of client server and return output

Hello EveryOne, I am new to *ix. some could help to write a script. Problem :- Have to ssh to so many client and check port or filesystem usage, so thinking to automate using script. What i Need:- when i run script on my Launchpad server, it should Should ask and SSH to user provided... (3 Replies)
Discussion started by: MeFirst
3 Replies

4. Shell Programming and Scripting

Shell script for Server Mount Point space check

Does anybody have anything I can use to help me out with this one? (4 Replies)
Discussion started by: lbone007
4 Replies

5. Shell Programming and Scripting

UNIX script to check file and start the informatica server

Hi Rockers, I hope u r dng good one. I have a one question is in unix with informatica . I need a unix script to check whether particular file exists in the folder , If it means we have a informatica server , so we can start the informatica server by accessing that file. Every week we have... (0 Replies)
Discussion started by: gurukrishnan
0 Replies

6. UNIX for Dummies Questions & Answers

Basic Script to check for a file

Hello, Little new to unix scripting. I need to create a script that will do the following. Check in a directory for a file that will be present between 19:00 and 23:00. If the file is present a e-mail then needs to be sent to myself confirming. I did write something basic...as below... ... (3 Replies)
Discussion started by: Thundercat1
3 Replies

7. Shell Programming and Scripting

Script to check file update on ftp server

Hi everybody, Is there a way to do a stat of files on a ftp server? I have a database which is populated by the contents of these files. I want to setup a crontab to check if there has been an update to these files. If the file has been updated I will download it and then update my database. ... (2 Replies)
Discussion started by: z1dane
2 Replies

8. UNIX for Advanced & Expert Users

how to check if a process is running in a server from shell script.

I want to write a unix shell script that will check if a process (say debu) is running in the server or not. If no , then send a mail to the corresponding person to start the process??? (2 Replies)
Discussion started by: debu
2 Replies

9. Shell Programming and Scripting

Help with a very basic network check script

i figured it out thanks though! (0 Replies)
Discussion started by: anon0mus
0 Replies

10. Shell Programming and Scripting

Script to check running processes on remote server.

Hi, I am trying to write a script, which queries a db to get the names of processes, stores it in a file and then checks if that process is running on a remote server. However I am not getting it right, could anyone help me out. #!/bin/sh echo "select Address from Device where Cust =... (5 Replies)
Discussion started by: amitsayshii
5 Replies
Login or Register to Ask a Question