≡ Menu

Monitor UNIX / Linux Server Disk Space with Shell Script

Shell script to monitor or watch the disk space and send an email alert if the (free avilable) percentage of space is >= 90%

{ 42 comments… add one }
  • Learning DBA October 3, 2016, 12:01 pm

    I am getting an error

    Syntax error: “fi” unexpected

    Please Help!!!

  • Rocky Islam July 2, 2015, 10:09 am

    i’m new in scripting … using this command i didn’t get any mail ….. help me

  • omprakash December 6, 2013, 7:44 am

    i want 5 mail alert instead of many alert when disk space reached max limit .

  • Leszek November 11, 2013, 3:50 pm


    Thanks for the script. It’s doing it’s job nicely but I’m a little surprised nobody complained about an error it returns if You don’t cut off the first line of df output:

    ./monitor.sh: 22: [: Illegal number: dost.

    I had to change line 19 to:

    df -H | grep -vE ‘^Filesystem|tmpfs|cdrom’ | tail -n+2 | awk ‘{ print $5 ” ” $1 }’ | while read output;

  • Scriptiee July 11, 2013, 7:42 am

    Brilliant little script, will put it to good use! Thanks guys

  • Yamaranews March 30, 2013, 8:13 am

    Its very helful
    Thank you

  • KC April 27, 2012, 1:04 pm

    Thanks, VIVEK and BEN. Very nice script and the quick correction, thanks a lot.

  • Andre October 19, 2011, 8:24 am

    Just answered my own question after a few days of figuring out bash regex. Are there any other more elegant ways?

    # set alert level 95% is default
    # The current variable takes from a file which gives the prior saved value of usage
    current=`cat /tmp/currentUsage`

    df -PH | grep -vE ‘^Filesystem|tmpfs|cdrom’ | awk ‘{ print $5 ” ” $1 }’ | while read output;
    usep=$(echo $output | awk ‘{ print $1}’ | cut -d’%’ -f1)
    partition=$(echo $output | awk ‘{ print $2 }’ )

    # If current usage is greater than ALERT and is greater the prior value then send a mail.

    if [ $usep -ge $ALERT ] && [ $usep -gt $current ]; then
    echo “Running out of space \”$partition ($usep%)\” on $(hostname) as on $(date)” |
    mail -s “Alert: Almost out of disk space $partition $usep%” $ADMIN

    # establish the new current value
    echo $output | awk ‘{ print $1}’ | cut -d’%’ -f1 > /tmp/currentUsage

  • Andre October 18, 2011, 1:48 am


    Right now, I have setup a cronjob to run this script hourly.
    Does anyone know how to stop the email to be sent out if the previous quota level is the same as the current one?

    i.e.: An email is sent once it hits the 95% threshold; however at the next hour if the level is still at 95%, no email is sent till it hits 96% or more.

  • Dinesh July 6, 2011, 7:25 am


    I am new to scripting.
    I have run this and working perfectly.
    Just want 2 modifications.

    If i want to check for more than one server using same script.
    And i want single mail instead of many.

    Please Help. :)

  • Anon April 20, 2011, 4:18 pm

    I have tried the script and it does not appear to work.

    I set the limit to “35”, as I wanted to test it out and the highest percentage usage was 38%. I changed the E-Mail address to what I want to use and then ran the script. The script has not sent me an E-Mail after 10 minutes of running it.

    I tried the “-P” that was mentioned in several comments without luck.

    The server that this script is currently running on is a basic Ubuntu 9.04 server and has only had SSH installed.

  • Anonymous March 24, 2011, 2:59 pm

    Thanks UWAYO.
    -P option worked with the script. Nice and simple script..

  • Ben October 19, 2010, 2:11 pm

    you should also use the -P option of df “df -P -H”
    (-P for POSIX compatibility so you dont get into trouble when your diskname ist to long like /dev/mapper/VolGroup00-LogVol00)
    also df -i (for inodes) is highly recommended to use, because you easily forget to check for inodes if you have free space but cant create a file =)

    • nicole January 17, 2011, 4:53 am

      Hi, i’m a newbie, and i’ve been asked to create a script that will monitor different directories in different systems e.g.:

      /home of system1 – 60%
      /models of system2 – 70%
      /bikes of system3 – 80%

      and any of the above meet their respective threshold, will send an email to me
      informing that that particular directory is on limit.

      fyi, i have a server than can ssh to all of this directories/systems.

      hoping for your quick response.

  • UWAYO Jacques September 8, 2010, 6:32 pm

    i get the below error what could be the problem

    but i dont receive anything
    # script to send simple email
    # email subject
    # Email To ?
    # Email text/message
    echo “This is an email message test”> $EMAILMESSAGE
    echo “This is email text” >>$EMAILMESSAGE
    # send an email using /bin/mail
    /bin/mail -s “$SUBJECT” “$EMAIL” < $EMAILMESSAGE

Security: Are you a robot or human?

Leave a Comment