[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