[linux] scriptje voor het weergeven van volle schijven

Pagina: 1
Acties:

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01-2025
Ik ben bezig een scriptje te schrijven wat een melding moet geven als een filesysteem voor meer dan 90% vol is. Ik heb hier het volgende scriptje voor gemaakt:
if ( `df -Hl|df -Hl|grep -v ^Filesystem|mawk '$5 > 90'| wc -l` < 0 ) ;then
echo
echo
echo "------------------ Disk Space Begin --------------------"
echo
df -Hl|df -Hl|grep -v ^Filesystem|mawk '$5 > 90 {print "filesystem "$1 " is
in use for " $5", there is only "$4" free"}'
echo "-------------------- Disk Space End --------------------"
fi
nu werkt het scriptje op zich wel, en geeft het de volgende output als ik hem op 50 zet ipv 90:
------------------ Disk Space Begin --------------------

filesystem /dev/hda1 is in use for 82%, there is only 3.8M free
filesystem /dev/hda2 is in use for 51%, there is only 2.4G free
-------------------- Disk Space End --------------------
nu is het de bedoeling dat hij alleen output genereerd als er filesystems zijn die voller dan 90% zijn, het moet nl via logwatch gebruikt gaan worden. Ik wilde hier de eerste regel voor gebruiken die er voor moet zorgen dat als de word count (wc) 0 is er niets gedaan wordt, nu krijg ik de foutmeling: ./disk_space: 0: No such file or directory

ziet iemand de fout in mijn script? ik denk zelf dat het aan de verkeerde manier van haakjes ofzo ligt, maar ik ben al even aan het zoeken en ik kan het niet vinden

  • u_nix_we_all
  • Registratie: Augustus 2002
  • Niet online
Ik heb zelf een scriptje waar dit in zit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for FS in `df -k|grep %|awk ' { print $6 } '`
do
  PER=`df -k $FS |grep %|awk '{ print $5 }' |cut -f 1 -d "%"`
  if [ $PER -le $TRESWARN ]
        then
        echo " ">/dev/null
        elif [ $PER -le $TRESURG ]
                then
                echo "Warning: " $FS " is at " $PER "% full"\
                >> $NFSSHARE/$APP/$APPTYPE/ito.log
                elif [ $PER -le $TRESCRIT ]
                        then
                        echo "Urgent: " $FS " is at " $PER "% full"\
                        >> $NFSSHARE/$APP/$APPTYPE/ito.log
                        else
                        echo "Critical: " $FS " is at " $PER "% full"\
                        >> $NFSSHARE/$APP/$APPTYPE/ito.log
  fi
done


Hiermee kun je verschillende levels aangeven , die uit je "environment" gehaald wordt. (in $TRESWARN , $TRESURG en $TRESCRIT)
Als je de regels met >> $NFSSHARE/$APP/$APPTYPE/ito.log er even uithaald,
krijg je de output op je standard out (lees scherm) :)

[ Voor 20% gewijzigd door u_nix_we_all op 07-02-2003 17:43 ]

You don't need a parachute to go skydiving. You need a parachute to go skydiving twice.


Verwijderd

AtlonXP1800 schreef op 07 February 2003 @ 16:58:
Ik ben bezig een scriptje te schrijven wat een melding moet geven als een filesysteem voor meer dan 90% vol is. Ik heb hier het volgende scriptje voor gemaakt:

[...]

nu werkt het scriptje op zich wel, en geeft het de volgende output als ik hem op 50 zet ipv 90:

[...]

nu is het de bedoeling dat hij alleen output genereerd als er filesystems zijn die voller dan 90% zijn, het moet nl via logwatch gebruikt gaan worden. Ik wilde hier de eerste regel voor gebruiken die er voor moet zorgen dat als de word count (wc) 0 is er niets gedaan wordt, nu krijg ik de foutmeling: ./disk_space: 0: No such file or directory

ziet iemand de fout in mijn script? ik denk zelf dat het aan de verkeerde manier van haakjes ofzo ligt, maar ik ben al even aan het zoeken en ik kan het niet vinden
Ik zou 't niet op de manier gedaan hebben zoals jij 't probeerd, maar da's een van de leuke dinkies onder linux: Vele oplossingen voor 't zelfde probleem.

Ok, uitgaande van jou script en dan 't een en ander aangepast:

- Waarom 2 x df -Hl achter elkaar (df -Hl | df -Hl)?? Een keer is voldoende,
- Ik heb geen mawk, dus gebruik awk in onderstaand scriptje,
- moet wc -l' < 0 niet wc -l' > 0 zijn??
- Heb geen/weinig bash ervaring, maar bij ksh moet je (( )) gebruiken ipv ().

Onderstaande doet, op mijn bak, precies wat jij wil: Alleen melden als disk voller is dan 90%

#!/usr/bin/ksh

if (( `df -Hl | grep -v "^Filesystem" | awk '$5 > 90' | wc -l` > "0" ))
then
echo "------------------ Disk Space Begin --------------------"
echo ""
df -Hl | grep -v "^Filesystem" | awk '$5 > 90 {print "filesystem "$1 " is in use for " $5", there is only "$4" free"}'
echo ""
echo "-------------------- Disk Space End --------------------"
fi

Veel script plezier!

  • MyDyingBride
  • Registratie: November 2001
  • Laatst online: 19-04 20:18
Misschien is het ook wel handig om je cdrom eruit te greppen.
Ik geloof niet dat het interesant is om te weten dat je cd 100% vol is.

Verwijderd

Verwijderd schreef op 07 februari 2003 @ 18:14:
[...]
- Waarom 2 x df -Hl achter elkaar (df -Hl | df -Hl)?? Een keer is voldoende,
Druuna doet nog steeds 2x df-k...
Het volgende scriptje doet in minder regels code hetzelfde, en laat ook nog een lijst zien met de directories + hun grootte op het te volle filesystem:

code:
1
2
3
4
5
6
7
8
9
10
df -k | awk '{print $1 " " $5 " " $6}' | sed -e 's/%//' |
while read FS PCT MNT
do
    if (($PCT > 50))
    then
        echo "$FS (mounted on $MNT) is $PCT% full. A list of all directories on
this filesystem, ordered by size, is stored in /tmp/du.`basename $MNT | sed -e 's/\///'`"
        du -kx $MNT | sort -n > /tmp/du.`basename $MNT | sed -e 's/\///'`
    fi
done

[ Voor 8% gewijzigd door Verwijderd op 08-02-2003 18:25 ]


Verwijderd

Wel lezen wat er staat en wat er gevraagd word.

1) Ik zou 't zelf anders aangepakt hebben, maar er werd commentaar gevraagd op 't script dat Atlon XP1800 zelf schreef,

2) '2 x df -Hl achter elkaar (df -Hl | df -Hl)', en dat doet 'ie 2 keer. M'n opmerking gaat dus over df -Hl | df -Hl.

[ Voor 10% gewijzigd door Verwijderd op 08-02-2003 18:50 ]


Verwijderd

OK, daar heb je gelijk in... Ik dacht gewoon dat het allemaal ietsje handiger/netter kon.
Pagina: 1