email_alerts_on_low_free_space
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
email_alerts_on_low_free_space [2009/08/18 10:24] – tkbletsc | email_alerts_on_low_free_space [2017/05/28 15:34] (current) – tkbletsc | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Email alerts on low free space ====== | ====== Email alerts on low free space ====== | ||
- | Create ''/ | + | Create ''/ |
- | <code=perl> | + | <code=python> |
- | #!/usr/bin/perl | + | #!/usr/bin/python |
+ | |||
+ | import sys, | ||
- | # Based on: | + | def get_free_GB(path): |
- | # | + | st = os.statvfs(dir) |
+ | avail = st.f_bavail * st.f_bsize | ||
+ | total = st.f_blocks * st.f_bsize / (1024.0**3) # free space in GB | ||
+ | used = total - avail | ||
+ | return (avail, | ||
- | use strict; | + | def send_email(to, |
- | use warnings; | + | fp_mail = subprocess.Popen(['/ |
- | use Filesys:: | + | fp_mail.write(message) |
+ | fp_mail.close() | ||
- | if (@ARGV != 3) { | ||
- | die " | ||
- | } | ||
- | my ($to,$dir,$warning_level) = @ARGV; | + | if len(sys.argv) != 4: |
+ | print " | ||
+ | sys.exit(1) | ||
+ | |||
+ | (_,to,dir,min_space_GB) = sys.argv | ||
+ | min_space_GB = float(min_space_GB) | ||
- | my $hostname = `hostname` || ' | + | hostname = socket.gethostname() |
- | chomp $hostname; | + | |
- | # email setup | + | (avail, |
- | my $subject | + | |
- | # get df | + | pct = avail/total*100 |
- | my ($fs_type, $fs_desc, $used, $avail, $fused, $favail) = df $dir; | + | |
- | $used /= 1024*1024; # to GB | + | if avail < min_space_GB: |
- | $avail /= 1024*1024; # to GB | + | subject |
- | my $total | + | message |
- | my $pct = $avail/ | + | |
- | # compare | + | Low disk space on $dir: %.1fGB / %.1fGB free (%.1f%%). Threshold is %.1fGB. |
- | if ($avail < $warning_level) { | + | "" |
- | open MAIL, "| / | + | send_email(to, |
- | printf MAIL " | + | |
- | close MAIL; | + | |
- | } | + | |
</ | </ | ||
Then create ''/ | Then create ''/ | ||
< | < | ||
- | / | + | / |
... | ... | ||
</ | </ | ||
- | ===== Alternate version that doesn' | ||
- | |||
- | If you don't have that module, use this: | ||
- | < | ||
- | # | ||
- | |||
- | # Based on: | ||
- | # | ||
- | |||
- | use strict; | ||
- | use warnings; | ||
- | #use Filesys:: | ||
- | |||
- | if (@ARGV != 3) { | ||
- | die " | ||
- | } | ||
- | |||
- | my ($to, | ||
- | |||
- | my $hostname = `hostname` || ' | ||
- | chomp $hostname; | ||
- | |||
- | # email setup | ||
- | my $subject = " | ||
- | |||
- | # get df | ||
- | my ($fs_type, $fs_desc, $used, $avail, $fused, $favail) = my_df($dir); | ||
- | $used /= 1024*1024; # to GB | ||
- | $avail /= 1024*1024; # to GB | ||
- | my $total = $used + $avail; | ||
- | my $pct = $avail/ | ||
- | |||
- | # compare | ||
- | if ($avail < $warning_level) { | ||
- | open MAIL, "| mail $to -s ' | ||
- | printf MAIL " | ||
- | close MAIL; | ||
- | } | ||
- | |||
- | |||
- | sub my_df { | ||
- | my ($p) = @_; | ||
- | # | ||
- | open DF, "df -P $p |" or die "df: $!\n"; | ||
- | scalar <DF>; # eat header | ||
- | my $line = <DF>; | ||
- | close DF; | ||
- | my ($dev, | ||
- | return (0, '', | ||
- | |||
- | } | ||
- | </ | ||
email_alerts_on_low_free_space.txt · Last modified: 2017/05/28 15:34 by tkbletsc