About

Script Categories

Shell script to get uptime, disk , cpu , RAM , system load, from multiple Linux servers - output the information on a single server in html format

Posted in Monitoring

Shell script to get uptime, disk usage, cpu usage, RAM usage, system load, etc; from multiple Linux servers and output the information on a single server in html format

#!/bin/bash
# Shell script to get uptime, disk usage, cpu usage, RAM usage,system load,etc.
# from multiple Linux servers and output the information on a single server
# in html format. Read below for usage/installation info
# *---------------------------------------------------------------------------*
# * dig_remote_linux_server_information.bash,v0.1, last updated on 25-Jul-2005*
# * Copyright (c) 2005 nixCraft project                                       *
# * Comment/bugs: http://cyberciti.biz/fb/                                    *
# * Ref url: http://cyberciti.biz/nixcraft/forum/viewtopic.php?t=97           *
# * This script is licensed under GNU GPL version 2.0 or above                *
# *---------------------------------------------------------------------------*
# *  Installation Info                                                        *
# ----------------------------------------------------------------------------*
# You need to setup ssh-keys to avoid password prompt, see url how-to setup
# ssh-keys:
# cyberciti.biz/nixcraft/vivek/blogger/2004/05/ssh-public-key-based-authentication.html
#
# [1] You need to setup correct VARIABLES script:
#
# (a) Change Q_HOST to query your host to get information
# Q_HOST="192.168.1.2 127.0.0.1 192.168.1.2"
#
# (b) Setup USR, who is used to connect via ssh and already setup to connect
# via ssh-keys
# USR="nixcraft"
#
# (c)Show warning if server load average is below the limit for last 5 minute.
# setup LOAD_WARN as per your need, default is 5.0
#
# LOAD_WARN=5.0
#
# (d) Setup your network title using MYNETINFO
# MYNETINFO="My Network Info"
#
# (e) Save the file
#
# Please refer to forum topic on this script:
# Also download the .gif files and put them in your output dir
#
# ----------------------------------------------------------------------------
# Execute script as follows (and copy .gif file in this dir) :
# this.script.name > /var/www/html/info.html
# ============================================================================
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------
 
# SSH SERVER HOST IPS, setup me
# Change this to query your host
Q_HOST="192.168.1.2 127.0.0.1 192.168.1.2"
 
# SSH USER, change me
USR="nixcraft"
 
# Show warning if server load average is below the limit for last 5 minute
LOAD_WARN=5.0
 
# Your network info
MYNETINFO="My Network Info"
#
# if it  is run as cgi we can do reload stuff too :D
PBY='Powered by <a href="http://cyberciti.biz/download/">script</a>'
 
# font colours
GREEN='<font color="#00ff00">'
RED='<font color="#ff0000">'
NOC='</font>'
LSTART='
<ul>
<li>'
LEND='</li>
</ul>
 
'
# Local path to ssh and other bins
SSH="/usr/bin/ssh"
PING="/bin/ping"
NOW="$(date)"
 
## functions ##
writeHead(){
 echo '<HTML><HEAD><TITLE>Network Status</TITLE></HEAD>
 <BODY alink="#0066ff" bgcolor="#000000" link="#0000ff" text="#ccddee" vlink="#0033ff">'
 echo '<CENTER><H1>'
 echo "$MYNETINFO</H1>"
 echo "Generated on $NOW"
 echo '</CENTER>'
 
}
 
writeFoot(){
 echo "<HR><center>$PBY</center>"
  echo "</BODY></HTML>"
}
 
## main ##
 
writeHead
echo '<TABLE WIDTH=100% BORDER=2 BORDERCOLOR="#000080" CELLPADDING=4 CELLSPACING=4 FRAME=HSIDES RULES=NONE" >'
echo '<TR VALIGN=TOP>'
for host in $Q_HOST
do
  #echo '<TD WIDTH=33% BGCOLOR="#0099ff">'
  echo '<TD BGCOLOR="#0099ff">'
  _CMD="$SSH $USR@$host"
  rhostname="$($_CMD hostname)"
 
  ruptime="$($_CMD uptime)"
  if $(echo $ruptime | grep -E "min|days" >/dev/null); then
    x=$(echo $ruptime | awk '{ print $3 $4}')
  else
    x=$(echo $ruptime | sed s/,//g| awk '{ print $3 " (hh:mm)"}')
  fi
  ruptime="$x"
 
  rload="$($_CMD uptime |awk -F'average:' '{ print $2}')"
  x="$(echo $rload | sed s/,//g | awk '{ print $2}')"
  y="$(echo "$x >= $LOAD_WARN" | bc)"
  [ "$y" == "1" ] && rload="$RED $rload (High) $NOC" || rload="$GREEN $rload (Ok) $NOC"
 
  rclock="$($_CMD date +"%r")"
  rtotalprocess="$($_CMD ps axue | grep -vE "^USER|grep|ps" | wc -l)"
  rfs="$($_CMD df -hT | grep -vE "^Filesystem|shm" \
  | awk 'BEGIN{print "
<ul>"}{w=sprintf("%d",$6);print "
<li>" $7 \
  "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" $6 \
  "(" $2 ")<BR> <img src=\"indicator.gif\" height=\"4\" width=\"" w "\"> \
  <BR><img src=\"graph.gif\"> \
  <BR>" $4"/"$3 "</li>
 
"}END{ print "</ul>
 
"}')"
 
  rusedram="$($_CMD free -mto | grep Mem: | awk '{ print $3 " MB" }')"
  rfreeram="$($_CMD free -mto | grep Mem: | awk '{ print $4 " MB" }')"
  rtotalram="$($_CMD free -mto | grep Mem: | awk '{ print $2 " MB" }')"
 
  $PING -c1  $host>/dev/null
  if [ "$?" != "0" ] ; then
    rping="$RED Failed $NOC"
  else
    rping="$GREEN Ok $NOC"
    echo "<b><u>$rhostname</u></b><BR>"
    echo "Ping status: $rping<BR>"
    echo "Time: $rclock<BR>"
    echo "Uptime: $ruptime <BR>"
    echo "Load avarage: $LSTART $rload $LEND"
    echo "Total running process: $LSTART $rtotalprocess $LEND"
    echo "Disk status:"
    echo "$rfs"
    echo "Ram/swap status:
<ul>"
    echo "
<li>Used RAM: $rusedram</li>
 
"
    echo "
<li>Free RAM: $rfreeram</li>
 
"
    echo "
<li>Total RAM: $rtotalram </li>
</ul>
 
"
  fi   
 
  echo "</td>
 
"
done
  echo "</tr>
</table>
 
"
writeFoot

Download - Email this to a friend - Printable version

Is your site working? Monitor Your Web Site 24/7. Get SMS alerts on server downtime! Free 30-day trial including 20 SMS!

Related Other Helpful Shell Scripts:

Discussion on This Shell Script:

  1. AirV’s Blog » Archive du blog » Monitoring Says:

    [...] Extrait de http://bash.cyberciti.biz/ [...]

  2. n2j3 Says:

    echo “Load avarage: $LSTART $rload $LEND”

    should really read

    echo “Load average: $LSTART $rload $LEND”

  3. Dipak Says:

    I have installed this script in to /var/www/html/ directory and changed name to info.html.
    I ran this script from command line
    #./info.html
    and I got an error line 110
    and 126

    What is next how do I run this script?

  4. Moussa NDIAYE Says:

    Hello Dipak.

    We cannot read what you put in lines 110 and 126.
    Try to be more explicit.. (next time if you want gurus to help you try to give them the informatons they need to debug ).

    this script is running under the linux box and display the results on a page, so try to visit http://the_server_where_the_script_is_running/info.html.

    Try it it post your results …

  5. idiot hunter Says:

    Moussa NDIAYE: If you were such a “guru” you would probably guess that he just copied the script as is,
    cat -n somefile gets you linenumbers…guru my ass ;)

  6. Panya Says:

    This link
    cyberciti.biz/nixcraft/vivek/blogger/2004/05/ssh-public-key-based-authentication.html

    is no longer valid…..

  7. Palani Says:

    hi,
    i am very new to shell script program, i tried u r script but i don’t know how to proceed
    and if run the script i am getting this error
    kindly guide me how to run the script ,

    script output !

    My Network Info
    <span style=color:
    Generated on Fri Oct 3 16:41:02 GMT 2008

    ./109.sh: line 110: syntax error near unexpected token `newline’
    ./109.sh: line 110: ` echo ”

    thanks & regards

    Palani.K

Leave a Reply

We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags: , , , , , , , , , , , , ~ Last updated on: April 10, 2008