[SunHELP] Shell script

Bashar sunhelp at sunhelp.org
Wed Jan 24 22:28:22 CST 2001


smaller easier shell script can be like this
#!/usr/local/bin/bash
# set the space you want to monitor here
myspace=80
df -k|awk '{print $5}' > /tmp/dfer
df -k > /tmp/real.df
grep $mypsace /tmp/dfer
RETURN=$?
if [ $RETURM -eq 0 ]
mail root < /tmp/real.df
fi



                    KuwaitNet Communications Inc.
        Bashar A AlAbdulhadi            UNIX & NET Administrator
        bashar at kuwaitnet.net            http://www.KuwaitNet.net
        Phone: (KW) +965-2647060        Fax: (KW) +965-5337060
        Phone: (US) +514-2417955        Fax: (US) +208-2755778
        ICQ UIN: 19907999               Pager: (KW) 9312471
        IRC: Big @ #Kuwaitnet           YaHoO ID: kuwaitnets
        Toll free (from USA & Canada only)  1-888-KuwaitNET

           "Quality, Stability, 24 Hours Tech. Support"
                          "Think KuwaitNet"

On Wed, 24 Jan 2001, Ivan Kovalev wrote:

> here is the best one I know, may be a bit more elaborate then what you
> are asking for...
> 
> $ cat dcp
> #!/usr/bin/perl
> 
> # dcp - disk capacity profiler
> # (c) 1999 inkcom
> 
> # Modify df command to fit your path and version
> $dfcommand = "/usr/bin/df -k";
> # The file containing historical data
> $history = "du/hist";
> 
> # Make sure that one or more filesystems are specified on the
> command-line
> $usage = "Usage: $0 filesystem [filesystems...]\n";
> if (@ARGV < 1) {
>    print $usage;
>    exit;
> }
> 
> # Open the history file for writing, if possible
> open HISTORY, ">> $history" or die "Cannot open $history for writing";
> 
> foreach $filesystem (@ARGV) {
>    # Make sure the filesystem exists
>    if (! -e $filesystem) {
>       print STDERR "$filesystem does not exist\n";
>       next;
>    }
> 
>    # Create a list of requested filesystems, for later use
>    @filesystems = (@filesystems, $filesystem);
> 
>    # Get the df statistics
>    $filesystem_info = `$dfcommand $filesystem`;
> 
>    # Get rid of the header line
>    $filesystem_info =~ s/(.)+\n//;
> 
>    # Get the total, used and available space values
>    # We are expecting the following format for the output of df:
>    # Filesystem         kbytes   used   avail capacity  Mounted on
>    # /dev/dsk/c0t3d0s0   192807   19980  153547    12%    /
>    ($discard, $total, $used, $available, @discard) = split /\s+/,
> $filesystem_info;
> 
>    # Get the timestamp
>    $time = time;
> 
>    # Save the data into the history file
>    print HISTORY "$time;$filesystem $total $used $available\n";
> }
> 
> # Close the history file for writing
> close HISTORY;
> 
> # Open the history file again for reading, or complain
> open HISTORY, "$history" or die "Cannot open $history for reading\n";
> 
> # Read the history into assiciative arrays
> while (<HISTORY>) {
>    ($timefilesystem, $total, $used, $available) = split /\s+/, $_;
>    $total{$timefilesystem} = $total;
>    $used{$timefilesystem} = $used;
>    $available{$timefilesystem} = $available;
> }
> 
> # Do some preliminary calculations
> foreach $timefilesystem (sort keys %total) {
>    ($time, $filesystem) = split /;/, $timefilesystem;
>    foreach $fs (@filesystems) {
>       if ($filesystem eq $fs) {
>          if (!$prevtime{$fs}) {
>             $prevtime{$fs} = $time;
>             $prevused{$fs} = $used{$timefilesystem};
>             next;
>          }
> 
>          # Time difference between data points
>          $timediff = $time - $prevtime{$fs};
> 
>          # Just in case...
>          next if ($timediff == 0);
> 
>          # Calculate the size growth rate in seconds
>          $growthrate = ($used{$timefilesystem} -
> $prevused{$fs})/$timediff;
>          
>          # Save these numbers for the average calculation
>          $growthratetotal{$fs} = $growthratetotal{$fs} + $growthrate;
>          $growthratenumber{$fs}++;
>          $lastsize{$fs} = $available{$timefilesystem};
> 
>          # Save the time and used values for next round
>          $prevtime{$fs} = $time;
>          $prevused{$fs} = $used{$timefilesystem};
>       }
>    }
> }
> 
> # Print out the results
> foreach $fs (@filesystems) {
>    # If there is not enough data, i.e., it's the first time that 
>    # info is requested for a particular partition
>    if ($growthratenumber{$fs} == 0 ) {
>       print "Not enough data for $fs. Please run $0 again.\n";
>       next;
>    }
> 
>    # Calculate the average time left in hours and days
>    $growthrate = $growthratetotal{$fs}/$growthratenumber{$fs};
> 
>    # Growthrate must be non-zero
>    if ($growthrate != 0) {
>       # Calculate the time left at the present in days and hours
>       $timeleft = $lastsize{$fs}/$growthrate/3600;
>       $daysleft = $timeleft/24;
> 
>       # If the partition is filling up...
>       if ($timeleft > 0 ) {
>          printf "$fs will be FULL in about %.2f hours (%.2f days)\n",
> $timeleft, $daysleft;
>       # Or, if the partion is emptying...
>       } else {
>          printf "$fs will be EMPTY in about %.2f hours (%.2f days)\n",
> abs $timeleft, abs $daysleft;
>       }
>    # Otherwise, there is no growth
>    } else {
>       print "$fs is not changing in size\n";
>    }
> }
> $
> walubank at hotmail.com wrote:
> > 
> > Does anybody have a shell script that will monitor the file system and send
> > a mail to root when they get to 80%
> > Thanks
> > Wally
> > _________________________________________________________________
> > Get your FREE download of MSN Explorer at http://explorer.msn.com
> > 
> > _______________________________________________
> > SunHELP maillist  -  SunHELP at sunhelp.org
> > http://www.sunhelp.org/mailman/listinfo/sunhelp
> _______________________________________________
> SunHELP maillist  -  SunHELP at sunhelp.org
> http://www.sunhelp.org/mailman/listinfo/sunhelp
> 




More information about the SunHELP mailing list