29. september 2000 - 10:43Der er
28 kommentarer og 1 løsning
plads check
ok, her er en lille opgave, jeg er startet med bsd for 2md siden, så jeg er ikke lige en haj..\"endnu\"
jeg er ved at lave et lille script som køre via cron, scriptet skal gå ind og checke hvor meget plads der er tilbage de forskille steder...\"dk -k | grep dev\"..., når det er gjort skal den tage første linje og checke den, den ser måske sådan her ud...\"/dev/vg00/lvol3 143360 36755 99957 27% /var, det jeg vil have den til at at den skal tage og kigge på %, og det er større end lad os sige 90%, så skal den så gøre noget andet, når det er gjort skal den tage næste linje...\"det er jo forskillet fra maskine til maskine, nogle har måske 5 linjer imens andre har 10..
Det eneste der måske kan være et problem er % tegnet, men det kan man fjerne med...\"df -k | grep dev | cut -d \"%\" -f 1 \", men resten kan jeg ikke lige få til at \"spille\"....
nu er det sådan at det er på mit arjbede jeg har det, og jeg er ikke liiiiiiiiiiige helt herre over hvad der skal ligge på, og den med Nyrup tror jeg ikke lige virker, den mand kan sgu ikke blive klog......ggg
Du må prøve dig frem med \"cut\" tallene. 55-80 bør være incl. 1 space for path.
df -k | tail +2 | cut -c49-50,55-80 | while read SPACE FILESYS do if [ $SPACE -ge 90 ] then echo \"ALARM $FILESYS is at or above $SPACE percent\" fi done
Kimsom........ problemet med den cut du skriver er, du kan ikke gå ud fra at den samme cut..\"cut -c49-0\", giver det samme resultat hvis du skriver det på en anden maskine, jeg for bla \" / \" resulata hvis jeg skriver \"cut -c49-50\", måden at fjerne % tegnet på er \"cut -d \"%\" -f 1\", scriptet skal være klog nok til at sige \" ok, jeg har så mange linjer, og nu checker jeg den første, og så vidre til næste\".....
Victor44......... tror ikke at det er en god ide, men det er ok, jeg ved at det skal kunne lade sig gøre unden nogle ekstra programmer, og jeg \"vil\" lave det i kun unix, for jeg kommer nok til at bruge det på andre maskiner, og jeg har ikke lyst til at installere en masse ting bare for et script.... :o)
Det var bare tanken om det måske kunne forbedre vort demokratis situation der virkede tillokkende på mig ;-) Det var et absolut useriøst indlæg fra min side. Beklager.
Jo det må kunne lade sig gøre med de værktøjer der er til rådighed i shell\'en. Ingen grund til at skyde kanoner med gråspurve........
df -k | tail +2 | while read FILESYS ALLOC USED AVAIL CAPACITY MOUNT do CAPACITY=`echo $CAPACITY | cut -d% -f1` if [ $CAPACITY -ge 90 ] then echo \"ALARM $MOUNT is at or above $CAPACITY percent\" fi done
df -k | tail +2 | while read FILESYS ALLOC USED AVAIL CAPACITY MOUNT do CAPACITY=`echo $CAPACITY | cut -d% -f1` if [ $CAPACITY -ge 90 ] then echo \"ALARM $MOUNT is at or above $CAPACITY percent\" fi done
cool, nu begynder det at ligne noget, nu for jeg et svar der ser sådan her ud..
ALARM /var is at or above 90 percent ALARM /usr is at or above 90 percent
nu skal jeg bare have den til at \"gribbe\" fat i enten /var eller /usr \"eller hvis der nu skulle være flere end lige de to og gøre nogle andre ting....
jeg holder weekend nu, men er tilbage på Mandag, så hvis der skulle være en løsning på det sidste ville du bare rede hele min næste uge....ssssss :o)
Ps. du kan nok får de point, men jeg vil lige have det hele på plads inden....sss
Her er et lille script der kan udføre det samme det kræver kun bash og sed. Det testet på en True64 og en Linuxbox. Derudover er det nemt at konfigurere hvis man støder på en df med andet format.
#!/bin/bash #antal kolonner i en beskrivelseslinje COLS=6 #hvilket index starter device p† DEVICE=0 #hvilket index starter usage p† DISKFREE=4 #hvilket index starter mountpoint p† MOUNTPOINT=5 #hvor mange procent m† der v‘re p† disken THRESHHOLD=90 #hvor mange kolonner er der i headeren af df INTROCOLS=6 INTROCOUNTER=0 COUNTER=0
#beregner modules p† det modtagne argument function modulus(){ TEMP=$[$1/$COLS] MODULUS=$[$1-$[$TEMP*$COLS]] }
#her skal koden v‘re der skal udfores #hvis max er n†et function warning(){ echo WARNING $1 mounted on $3 uses $2% of its physical storage }
#henter alle linjer fra input #og behandler dem for LINE in [`df`] do if [ $INTROCOUNTER -le $INTROCOLS ] then INTROCOUNTER=$[$INTROCOUNTER+1] else modulus $COUNTER if [ $MODULUS -eq $DEVICE ] then HD=$LINE elif [ $MODULUS -eq $DISKFREE ] then USAGE=`echo $LINE|sed -e \'s/[%]//\'` elif [ $MODULUS -eq $MOUNTPOINT ] then MP=`echo $LINE|sed -e \'s/[]]//\'` if [ $USAGE -ge $THRESHHOLD ] then warning $HD $USAGE $MP fi fi COUNTER=$[ $COUNTER+1 ] fi done
undskyld at der gik lidt tid, men jeg har ikke rigtig haft tid før nu, jeg mangler bare en ting, du godt hjælpe det er helt op til dig... :o)
når scriptet køres og jeg for \"lad så sige 4 linjer\" så skal jeg have den til at sige..\"Mmm ok, /var er fuld, så skal jeg gøre noget andet, og /usr er fuld så skal jeg gøre noget helt andet\"...
den skal læse en linje og behandle dem en efter en.....
men 1000 tak for din hjælpe, det var sgu fedt, jeg er ikke helt så godt til unix endnu, men kommer...\"al begyndelse er svær\"........
Her er så et udkast - dine actions foretages i en case struktur som du selv kan udbygge. Hvis du har flere spørgsmål vedr. UNIX o.lign. kan jeg mailes på kim@sommer.dk. Eksemplet sletter aller filer i tmp bibliotekerne (jeg har dog kommenteret linierne) - men det er jo bare et eksempel.
df -k | tail +2 | while read FILESYS ALLOC USED AVAIL CAPACITY MOUNT do CAPACITY=`echo $CAPACITY | cut -d% -f1` if [ $CAPACITY -ge 90 ] then echo \"ALARM $MOUNT is filled to $CAPACITY percent\"
case \"$MOUNT\" in \"/var\") echo \"Files in $MOUNT/tmp will be cleared\" # rm -rf $MOUNT/tmp/* echo ;;
\"/usr\") echo \"Files in $MOUNT/tmp will be cleared\" # rm -rf $MOUNT/tmp/* echo ;;
det skal ikke være sådan at jeg skal fortælle criptet hvor den skal rydde og eller andet, den skal undersøge om der skulle være nogle steder hvor den overskrider 90%...\"hvilket det gør nu\"...., derefter skal den selv kunne finde ud af om \"hvor\" den er fuld, hvis der nu er en der hedder /test1, så skal den sige....\"ok, jeg har fundet et sted hvor den er fuld og det ligger et eller andet sted på /test1\"...
jeg skriver lige til din mail... :o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.