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.1250616246.txt.gz · Last modified: (external edit)
