How to setup Email notification when storage reach certain % ?

Hi, I recently research on how auto-mailing to notify the increase of storage size. I try avoid schedule/routine checkup the storage to determine increase the storage size. It is time-consuming. Any comment on how to get the storage size %? and automatically trigger mailing function instead manually?

Stuff like that is being asked once and then - the search function of the forum returned this thread for example:

Thank for reply. I really surf through but i can't get the keyword for it.
What's i trying search is unix+email+storage. Obviously, it didn't return useful information.

I'm encounter any problem now. 'mail' cannot send out email to existing exchange server.
I guess i suppose setup SMTP host but i don't really know where is the configuration location. Anybody can assist me on how to configure SMTP mail server in Solaris 10?

from a script, check the disk space and if it reaches x% to capacity, email out.

i take it this is what you are looking for?

you could simply look at the output of `df -h` and awk out the capacity. then depending on its results, use `mailx` to send out an email.

however, may i suggest snmp traps? if you have a NMS in place already, this is much more efficient. look into upgrading net-snmp to latest version and adjust snmpd and associated config files accordingly.

you don't need to go through the hassle of setting up a smtp server.

Ya. I has been successfully extract out FileSystem % as Zaxxon show in example. I'm encounter a new problem or may be challenge. I cannot email out the stuff. I'm trying sendmail command and trying configure sendmail.mc.

It is still not working. I have go through several steps as following:

  • vi /etc/hosts
127.0.0.1       localhost
100.100.100.100      WSERV WSERV. loghost
then, # check-hostname
Hostname WSERV OK: fully qualified as WSERV.
  • vi /etc/mail/cf/cf/local.mc
define(`SMART_HOST', `mail.companyX.com')dnl
Remove the line MAILER(`local')dnl.
Remove the line LOCAL_NET_CONFIG.
Remove the R$* < @ $* .$m. > $* $#esmtp $@ $2.$m $: $1 < @ $2.$m. > $3.
  • Compile and deploy local.mc to sendmail.cf
# /usr/ccs/bin/m4 ../m4/cf.m4 local.mc > /etc/mail/sendmail.cf
  • Restart sendmail
# svcadm restart sendmai

When I trying send out the email, it is seem like working but i didn't get any mail from exchange server.

WSERV% sendmail -v counsellor@companyX.com
testing
.
counsellor@companyX.com... Connecting to [127.0.0.1] via relay...
220 WSERV. ESMTP Sendmail 8.13.8+Sun/8.13.8; Thu, 1 Apr 2010 12:35:57 +0800 (MYT)
>>> EHLO WSERV.
250-WSERV. Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-DELIVERBY
250 HELP
>>> VERB
250 2.0.0 Verbose mode
>>> MAIL From:<informix@WSERV> SIZE=8
250 2.1.0 <informix@WSERV>... Sender ok
>>> RCPT To:<counsellor@companyX.com>
>>> DATA
250 2.1.5 <counsellor@companyX.com>... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
050 <counsellor@companyX.com>... Connecting to mail.companyX.com via relay...
050 <informix@WSERV>... Warning: alias database /etc/mail/aliases.db out of date
050 <informix@WSERV>... Connecting to local...
050 220 WSERV LMTP ready
050 >>> LHLO WSERV.
050 250-WSERV
050 250-8BITMIME
050 250-ENHANCEDSTATUSCODES
050 250 PIPELINING
050 >>> MAIL From:<>
050 250 2.5.0 ok
050 >>> RCPT To:<informix>
050 >>> DATA
050 250 2.1.5 ok
050 354 go ahead
050 >>> .
050 250 2.1.5 informix OK
050 <informix@WSERV>... Sent
250 2.0.0 o314ZvoG022914 Message accepted for delivery
counsellor@companyX.com... Sent (o314ZvoG022914 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 WSERV. closing connection
WSERV% pwd

You don't need to set up an SMTP host from scratch (sendmail needs a lot of study ;)). Use a perl script calling up the Net::SMTP module and connect to an existing SMTP host (you do have one of these, don't you?)

Here's a script that I knocked up. Call it up by piping or redirecting the message content with a message title followed by a list of users.

#!/usr/bin/perl
#(C) son_t, 2010
#Usage: sendmessage.pl "MESSAGE TITLE" <user> [<user>] < message_content_file
#Or: cat message_content_file | sendmessage.pl "MESSAGE TITLE" <user> [<user>]"

use Net::SMTP;

my $domain = "YOUR DOMAIN";
my $smtphost = "YOUR SMTP HOST";
my $sending_user = `/usr/ucb/whoami`;
chop($sending_user);
my $server = `/usr/bin/hostname`;
chop($server);

my $subject=shift(@ARGV);

my @users = @ARGV;
if (!@users) {
    print STDERR "Must specify one or more users\n";
    exit 1;
}

# qualify addresses
for (my $i = 0; $i < @users; $i++) {
    $users[$i] = $users[$i] . "\@$domain" if ($users[$i] !~ /\@/);
}

# connect
#print "connect smtphost:$smtphost server.domain:$server.$domain\n";
$smtp = Net::SMTP->new("$smtphost",Hello=>"$server.$domain");
if (!defined($smtp)) {
    print STDERR "Error connecting to server\n";
    exit 1;
}

# setup
#print "setup $sending_user\@$server.$domain\n";
$smtp->mail("$sending_user\@$server.$domain");
$smtp->recipient(@users);
$smtp->data();

# header
my $tousers = join(', ', @users);
#print "header tousers:$tousers sending_user:$sending_user\@$server.$domain subject:$subject\n";
$smtp->datasend("To: $tousers\n");
$smtp->datasend("From: $sending_user\@$server.$domain\n");
$smtp->datasend("Subject: $subject\n\n");

# body
$smtp->datasend(<STDIN>);

# finish
$smtp->dataend();
$smtp->quit;

It would be nice to see your (or anybody's) disk usage monitoring script, if you've written one. I've got one, which I found on the web and modified for my own use (which I could post if anyone is interested.)

my disk monitoring script = net-snmp

Thank alot, Son_t but my company not execute the Perl script. We have standardize all using c shell script.

I will continuous research on it. Thank

---------- Post updated 04-02-10 at 03:29 AM ---------- Previous update was 04-01-10 at 08:44 PM ----------

Is that anything mistake in the DaemonPortOptions or should i enable ClientPortOptions also? My plan is used Solaris to send out the email to exchange server as smtp protocol.
Please give any recommend.

# SMTP daemon options

O DaemonPortOptions=Name=MTA
O DaemonPortOptions=Port=987, Name=MSA, M=E

# SMTP client options
#O ClientPortOptions=Family=inet, Address=0.0.0.0

Yes. Finally, i get the solution. :D:D:D

From example i read from article is apply 'hostname.' but it is not recognized from the server. We need like this 'hostname.com'. It is simplest edit the /etc/hosts and whatever i configure sendmail.mc last time is work fine.

/etc/hosts

127.0.0.1        localhost
192.168.1.1     serverName     serverName.com      loghost

Sorry, i encounter another relevant for this topic.

I have another mirror which is umounted in /etc/vfstab. how to know the percentage usage in this umounted partition?

can't monitor something that doesn't exist :smiley:

Even It is not mounted fs but it still in mirroring and allocated to multi-soft partition. Any alternative method to monitor the storage status of soft partition or mirror?

If a filesystem is not mounted, you still can use the df command to get the usage of the filesystem, like:

# df /dev/md/dsk/d103
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/md/dsk/d103     5159862 1054466 4053736    21%

thank for reply. It is really appreciate but it show error as below:

# df /deve/md/dsk/d100

df: /dev/md/dsk/d100: not a ufs file system

You can find out the type of the filesystem with

# fstyp /dev/md/dsk/d100
ufs

When you know the type you can add it as argument to the df command:

df -F ufs /dev/md/dsk/d100

Replace ufs with whatever your filesystem type is.

I try but it's not working. Are the commands only work on ufs fs?

# fstyp /dev/md/dsk/d100
Unknown_fstyp (no matches)

# df -F ufs /dev/md/dsk/d100
Filesystem            kbytes    used   avail capacity  Mounted on
df: /dev/md/dsk/d100: not a ufs file system

fstyp uses a specialized module for every supported filesystem. You can find them under

/usr/lib/fs/*/fstyp

where * are the supported filesystems on your machine (like ufs, zfs, vxfs, ...)

If fstyp prints unknown_fstyp, then the device is most likely not formatted with a filesystem.