Hi all...

I have an attached program w/ text file, if anyone cares to look at...

It is a small perl pgm that checks filesystem(s) which have a soft/hard limit.
It mails the recipient when a limit is exceeded.

I have just ported to a differnet linux box.
The perl version on the linux box I'm trying to compile/run on now is newer!

So, I get some warnings w/ the "-w" option.

Here is the chunk or snip of code that fails:

     62                   if( $Limit{$mpnt} eq undef ){
     63                         &undefined_mpnt( $mpnt );
     64                 } else {
     65                         ($soft, $hard) = split(' ',$Limit{$mpnt});

The interpreter/compiler reports:

Name "main::min_free" used only once: possible typo at ./softfs line 84.
Name "main::time" used only once: possible typo at ./softfs line 42.
Name "main::iused" used only once: possible typo at ./softfs line 52.
Name "main::ifree" used only once: possible typo at ./softfs line 52.
Name "main::iper" used only once: possible typo at ./softfs line 52.
Use of uninitialized value at ./softfs line 62, <DF> chunk 2.
Use of uninitialized value at ./softfs line 62, <DF> chunk 3.
Use of uninitialized value at ./softfs line 62, <DF> chunk 4.
Use of uninitialized value at ./softfs line 62, <DF> chunk 5.
Use of uninitialized value at ./softfs line 62, <DF> chunk 6.

Please let me know if anyone can help or you need more info!

-TIA

Scott
 

#!/usr/bin/perl -w 
#
# [hard|soft]fs - check for "full" disks
#
#     "full" is defined as having more than the soft or hard limit
#     mentioned in the $LIMITS file, which should consist of lines of
#     filesystems, softfree, and hardfree values.
#
#     In the event a filesystem hits its soft limit, the sysadmin should
#     receive mail.  If a filesystem hits its hard limit, crisis gets
#     notified.  Filesystems mounted via NFS are ignored.
#
#     based on dfbitch by tom christiansen, 9-sep-90
#
#  Version   Date       Author    Comments
#    1.0     01/11/94   gwh       Initial release
#    1.01    02/27/96   jas       Modified for Verona
#    1.1     09/21/96   jas       The War of OS Independence Won, also
#                                 seperated crisis (hard) from sysadmin (soft)
#    

$ENV{"PATH"} = "/bin:/usr/bin:/usr/local/bin:/usr/lpp/X11/bin";
$SOFTFS      = "/repository/scripts/softfs";
$HARDFS      = "/repository/scripts/hardfs";
$LIMITS      = '/repository/scripts/capacities';
$HOST        = `/bin/hostname`;  chop( $HOST );
$OPMSG       = "Low on disk space. Call System Administrator.";
$SYSADMIN    = '[EMAIL PROTECTED]';
$CRISIS      = '[EMAIL PROTECTED]';
$SHOULD_WALL = "ok";     # Comment this line if we shouldn't wall
$OS          = `uname`;  # No path specified 'cause uname is located elsewhere
                         # on Linux than on AIX

        chop( $OS );
        if( $OS ne 'Linux' && $OS ne 'AIX' ){
                print STDERR "[soft|hard]fs: can't identify your OS\n";
                exit;
        }

        @n=localtime(time());
        @mon=("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
        $time=sprintf("%s %2.2d 
%2.2d:%2.2d:%2.2d",@mon[$n[4]],$n[3],$n[2],$n[1],$n[0]);

        &read_exceptions; 
        open(DF, "df -v|");
        $_ = <DF>;              # skip header

        while ( <DF> ) 
        {
            chop;
                if( $OS eq 'AIX' ){
                        ($fs,$tot,$kused,$kfree,$kper,$iused,$ifree,$iper,$mpnt) = 
split;
                } elsif( $OS eq 'Linux' ){
                ($fs,$tot,$kused,$kfree,$kper,$mpnt) = split;
                }

                # Skip NFS-mounted filesystems - their sysadmin should worry, not us
                if( /:/ || !($fs =~/\//) ){ next; }

            $kper =~ s/%//;
                if( $Limit{$mpnt} eq undef ){
                        print STDOUT "$Limit";
                        &undefined_mpnt( $mpnt );
                } else {
                        ($soft, $hard) = split(' ',$Limit{$mpnt});
                        if ( $kper > $soft && $0 eq $SOFTFS ){
                                &soft_alert($mpnt, $kused, $kper);
                        } 
                        if ( $kper > $hard && $0 eq $HARDFS ){
                                &hard_alert($mpnt, $kused, $kper);
                        } 
                }
        } 

        close DF;
        exit;

# ---------------------------------------------------------------------------

sub read_exceptions {
    local($mpnt, $min_free);
    if (-e $LIMITS) {
                open (LIMITS) || die "can't open $LIMITS: $!";
                while ( <LIMITS> ) {
                    next if /^\s*#/ || /^\s*$/;
                    chop;
                    ($mpnt, $soft_free, $hard_free) = split(' ');
                        $Limit{$mpnt} = $soft_free ." " . $hard_free;
                } 
                close LIMITS;
    } 
}

# ---------------------------------------------------------------------------

sub soft_alert {
    local($mpnt, $kused, $kper) = @_;

    open (MAIL, "| /usr/lib/sendmail -oi -t");
    select(MAIL);

    print <<EOM;
From: Disk Monitor Daemon <daemon>
To: $SYSADMIN
Cc: 
Subject: $mpnt on $HOST is $kper% full

Please check into this situation as soon as possible.

Your friendly Disk Monitor Daemon

EOM

    close MAIL;
    select(STDOUT);
} 

# ---------------------------------------------------------------------------

sub hard_alert {
    local($mpnt, $kused, $kper) = @_;

        open( MAIL, "| /usr/lib/sendmail -oi -t" );
        select( MAIL );

        print <<EOM;
From: Disk Monitor Daemon <daemon>
To: $CRISIS
Cc: 
Subject: $mpnt on $HOST is $kper% full

Please check into this situation as soon as possible.
The logs will be rotated in order to save space!

Your friendly Disk Monitor Daemon
EOM

        if( $SHOULD_WALL ne undef ){
        system("echo \"$OPMSG\" | wall");
        }

        #-------
        # rotate the log file to save space
        #-------

        system("/www/bin/rotatewnlogs -g -r wn");
}

# ---------------------------------------------------------------------------

sub undefined_mpnt {
        local( $mpnt ) = @_;

        open( MAIL, "| /usr/lib/sendmail -oi -t" );
        select( MAIL );

        print <<EOM;
From: Disk Monitor Daemon <daemon>
To: $SYSADMIN
Cc: 
Subject: Tisk, Tisk!

Please add the mountpoint $mpnt to $LIMITS so that monitoring
may be performed on this filesystem.

Your friendly Disk Monitor Daemon
EOM

    close MAIL;
    select(STDOUT);
}
# Disk limits data file for the [hard|soft]fs scripts
#
# Filesystem              Soft limit    Hard limit

    /                         80            90
    /home                     30            90
    /var                      80            90
    /usr                      85            95
    /usr                      85            95
    /boot                     85            95
    /cdrom                   101           101

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to