Re: help regarding bdf output shell script !!!! (366 Views)
Reply
Frequent Advisor
Pravin Salgaonkar
Posts: 42
Registered: ‎02-17-2005
Message 1 of 14 (367 Views)
Accepted Solution

help regarding bdf output shell script !!!!

Hi,
I have written a funtion which taken bdf output and put's in a file.
The idea is to get all areas greater than 80% and echo the same on the system once they have reached 80 % limit. However the script I have written fails with the error.

The script is :-

======================================
output ()
{/usr/bin/bdf -l |awk '$0 !~ /^F/' |awk '{print $5"\t" $6}'| sed 's/'%'/''/' >/tmp/bdflist}

panic ()
{while read percent dir
do
if [[ $percent -ge 80 ]]
then
echo "File syste Full - `hostname`:$dir is at $percent%"
fi
done} < /tmp/bdflist
output
panic
===========================================
+ awk $0 !~ /^F/
+ awk {print $5"\t" $6}
+ sed s/%//
+ 1> /tmp/bdflist}
./test[8]: Syntax error at line 9 : `do' is not expected.

Please assist in resolving the same.
Thanking you in advance
Please use plain text.
Honored Contributor
Court Campbell
Posts: 1,605
Registered: ‎08-12-2004
Message 2 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

here is a simple script i use written in perl. feel free to change it up.

$mailto = 'some@email_addr.com';
$hostname = `hostname`;
@mounts = `bdf`; #puts bdf info into seperate array elements

foreach (@mounts){
if ($_ =~ /100%|9[0-9]|8[0-9]%/) {
$fs = $';
chop $fs;
$mesg .= "$fs is at $&.\n";
}
}

if ($mesg) {
`echo "$mesg" | mailx -s "$hostname Filesystem Warning" $mailto`;
}
"The difference between me and you? I will read the man page." and "Respect the hat." and "You could just do a search on ITRC, you don't need to start a thread on a topic that's been answered 100 times already." Oh, and "What. no points???"
Please use plain text.
Honored Contributor
Hasan  Atasoy
Posts: 768
Registered: ‎06-05-2007
Message 3 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

output ()
{
/usr/bin/bdf -l |awk '$0 !~ /^F/' |awk '{print $5"\t" $6}'| sed 's/'%'/''/' >/tmp/bdflist
}

panic ()
{
cat /tmp/bdflist | while read percent dir
do
if [[ $percent -ge 80 ]]
then
echo "File syste Full - `hostname`:$dir is at $percent%"
fi
done
}
output
panic
Please use plain text.
Honored Contributor
Court Campbell
Posts: 1,605
Registered: ‎08-12-2004
Message 4 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

noticed a mistake

($_ =~ /100%|9[0-9]|8[0-9]%/)

should be

($_ =~ /100%|9[0-9]%|8[0-9]%/)

"The difference between me and you? I will read the man page." and "Respect the hat." and "You could just do a search on ITRC, you don't need to start a thread on a topic that's been answered 100 times already." Oh, and "What. no points???"
Please use plain text.
Honored Contributor
Geoff Wild
Posts: 7,168
Registered: ‎06-04-2001
Message 5 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

Try:

/usr/bin/bdf -l |awk '$0 !~ /^F/' |awk '{print $5"\t" $6}'| sed 's/'%'/''/'|
while read percent dir
do
if [[ $percent -ge 80 ]]
then
echo "File syste Full - `hostname`:$dir is at $percent%"
fi
done


Rgds...Geoff
Proverbs 3:5,6 Trust in the Lord with all your heart and lean not on your own understanding; in all your ways acknowledge him, and he will make all your paths straight.
Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 6 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

Hi:

The simple fix, is to place the curly braces for each function on a line by themselves:

...
output ()
{
/usr/bin/bdf -l |awk '$0 !~ /^F/' |awk '{print $5"\t" $6}'| sed 's/'%'/''/' >/tmp/bdflist
}
panic ()
{
while read percent dir
do
if [[ $percent -ge 80 ]]
then
echo "File syste Full - `hostname`:$dir is at $percent%"
fi
done
} < /tmp/bdflist
output
panic

...

This script could/should be rewritten to eliminate using temporary files (pipe output to the 'read') and should let ONE 'awk' do the work of matching and extracting (consider using 'awk's 'split').

For a simple script like this, in-lining your code like Geoff suggested is probably a more-readable approach.

Regards!

...JRF...
Please use plain text.
Honored Contributor
john korterman
Posts: 1,117
Registered: ‎11-15-2000
Message 7 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

Hi,

include a shell interpreter and a few newlines:

#!/usr/bin/sh
output ()
{
/usr/bin/bdf -l |awk '$0 !~ /^F/' |awk '{print $5"\t" $6}'| sed 's/'%'/''/' >/tm
p/bdflist
}

panic ()
{
while read percent dir
do
if [[ $percent -ge 80 ]]
then
echo "File syste Full - `hostname`:$dir is at $percent%"
fi
done < /tmp/bdflist
}

output
panic


regards,
John K.
it would be nice if you always got a second chance
Please use plain text.
Honored Contributor
spex
Posts: 1,367
Registered: ‎05-14-1996
Message 8 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

The latest version of Bill Hassell's bdfmegs shell script includes a '-P ' option to suppress output for filesystems with utilization <= pct. You can grab it from this thread:

http://forums1.itrc.hp.com/service/forums/questionanswer.do?threadId=1124262

PCS
Please use plain text.
Honored Contributor
Bill Hassell
Posts: 14,199
Registered: ‎05-29-2000
Message 9 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

One of the problems with bdf is that it automatically wraps a line if the source disk name is too long and this messes up all the numbers. My bdfmegs script can be run with any headers and show just the problem mountpoints. You can select the maximum percentage:

bdfmegs -qP 90

Only the mountpoints that are greater than or equal to 90% full will be shown.
Please use plain text.
Honored Contributor
Bill Hassell
Posts: 14,199
Registered: ‎05-29-2000
Message 10 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

Clarification: bdfmegs always shows each mountpoint on a single line making it ideal for scripting. I have attached the script here.
Please use plain text.
Honored Contributor
Bill Hassell
Posts: 14,199
Registered: ‎05-29-2000
Message 11 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

Sorry, attachments are not working in the forums today, get your copy from:

http://forums1.itrc.hp.com/service/forums/questionanswer.do?threadId=1124262
Please use plain text.
Honored Contributor
Dave La Mar
Posts: 829
Registered: ‎03-27-2001
Message 12 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

I hve used Bill'd bdfmegs quite successfully.
Here is one we have in production on all machines. It runs on Monday and Friday and looks for 80+% full as well as chack one particular vg.

Regards,

-dl
#!/usr/bin/ksh
#############################################################################
# 12/24/01 dlamar Scan % full for lvols #
# If over the threshold email sysadm #
# 08/21/02 dlamar Changed MAIL_LIST #
# 12/18/02 dlamar Added status of job home to daily report. #
# 12/26/02 dlamar Cleaned up the rm of .txt and .rpt. #
# 06/04/2003 dlamar Added logic to ignore cdrom. #
# 10/08/2003 rmark Corrected logic to check jobprod #
# #
#############################################################################
SCRIPT_HOME="/usr/local/bin/systems"
MAIL_LIST="your_email_address@somewhere.com"


if [ -f $SCRIPT_HOME/percent_full.txt ]
then
rm $SCRIPT_HOME/percent_full.txt
fi

if [ -f $SCRIPT_HOME/percent_full.rpt ]
then
rm $SCRIPT_HOME/percent_full.rpt
fi

echo "\t\t$(hostname)\tSYSTEM/JOB\tDISK\tSTATUS\tREPORT\t`date +%m/%d/%y`\n" > $SCRIPT_HOME/percent_full.rpt
bdf |while read diski
do
dper=`echo $diski | awk -F" " '{printf "%d\n", $5}'`
if [ $dper -gt 80 ]
then
dmount="`echo $diski |awk '{printf "%s\n", $6}'`"
if ( test "$dmount" != "/cdrom" )
then
echo "\t\t\t\t$dmount\t\t$dper% \n" >> /$SCRIPT_HOME/percent_full.txt
fi

fi
done
bdf | grep 0_40 | cut -c48-49 | sed '1d' | read job_percent

if [ $job_percent -gt 80 ]
then
bdf | grep 0_40 | cut -c48-66 | sed '1d' | read jobdir
echo "\t\t\t\t/jobprod\t\t$jobdir \n" >> /$SCRIPT_HOME/percent_full.txt

fi

if [ -f $SCRIPT_HOME/percent_full.txt ]
then
cat /$SCRIPT_HOME/percent_full.txt >> /$SCRIPT_HOME/percent_full.rpt
ux2dos $SCRIPT_HOME/percent_full.rpt | uuencode Lvols_Nearing_full.txt | mailx -m -s "JOBPROD Home & Lvols Over 80% Full on $(hostname)" $MAIL_LIST
fi
"I'm not dumb. I just have a command of thoroughly useless information."
Please use plain text.
Honored Contributor
spex
Posts: 1,367
Registered: ‎05-14-1996
Message 13 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

Here's a wrapper script I've written around Bill's bdfmegs.sh:


#!/usr/bin/sh

typeset -i MAXPCT=95
typeset -i TIMEOUT=1 # number of days to retain LOCKFILE
BDFMEGS=/root/scripts/util/bdfmegs.sh
TEMPFILE=/tmp/check_filesystem_usage.${$}.tmp
LOCKFILE=/tmp/check_filesystem_usage.lck

# rm LOCKFILE if mtime > ${TIMEOUT}, so that duplicate reports will be generated, on occasion
find ${LOCKFILE} -type f -mtime +${TIMEOUT} -print | xargs rm -f 2> /dev/null
[ ! -f ${LOCKFILE} ] && touch ${LOCKFILE}

trap "[ -f ${TEMPFILE} ] && rm -f ${TEMPFILE}" 0 1 2 3 15
${BDFMEGS} -qglP ${MAXPCT} | grep -v '^$' > ${TEMPFILE}

if [ -s ${TEMPFILE} ]
then
$(grep -q -v -f ${LOCKFILE} ${TEMPFILE}) && \
{ grep -v -f ${LOCKFILE} ${TEMPFILE} >> ${LOCKFILE}
mailx -m -s "WARNING! FILESYSTEM(S) OVER ${MAXPCT}% FULL!" root << EOF
File-System Gbytes Used Avail %Used Mounted on
$(cat ${TEMPFILE})

Remember to delete ${LOCKFILE} after freeing up space!
EOF
}
# exit with rc of 1 if any filesystems with utilization > ${MAXPCT} were returned
exit 1
fi

# otherwise, exit with rc of 0
exit 0
Please use plain text.
Frequent Advisor
Pravin Salgaonkar
Posts: 42
Registered: ‎02-17-2005
Message 14 of 14 (366 Views)

Re: help regarding bdf output shell script !!!!

thanks
Please use plain text.
The opinions expressed above are the personal opinions of the authors, not of HP. By using this site, you accept the Terms of Use and Rules of Participation