p0ker Skrevet 1. desember 2008 Del Skrevet 1. desember 2008 Hei, Jeg holder på å lage noen små script som skal overvåke log filene i /var/log/*** Nov 30 12:09:20 HOST service [xxxxx] - Logged message.... Dec 1 00:09:20 HOST service [xxxxx] - Logged message.... Dec 1 05:09:20 HOST service [xxxxx] - Logged message.... Dec 1 10:11:12 HOST service [xxxxx] - Logged message.... Dec 1 13:09:20 HOST service [xxxxx] - Logged message.... Jeg prøver da å få de siste 24 timene, men dette er tydeligvist ikke så lett. Har funnet en metode, men den er ubrukelig og har masse "hull".... Noen som har noen gode forslag på hvordan man skal få ut de siste 24 timene med entries fra en logg fil? Lenke til kommentar
x871kx6167ss7 Skrevet 1. desember 2008 Del Skrevet 1. desember 2008 Hvorfor prøver du ikke selv? Driver aldri med bash selv, men synes det er morsomt å knekke "nøtter" som denne, så etter litt om og men fikk jeg dette til: #!/bin/bash DATELIMIT=`date +%s` DATELIMIT=$((DATELIMIT-86400)) while read line do set -- $line MONTH=$1 DAY=$2 TIME=$3 LOGDATE=`date -d "$MONTH $DAY $TIME" +%s` if [ $LOGDATE -gt $DATELIMIT ]; then echo $line fi done < $1 Som gir output: [peter@aasen ~]$ ./d testfil Dec 1 00:09:20 HOST service [xxxxx] - Logged message.... Dec 1 05:09:20 HOST service [xxxxx] - Logged message.... Dec 1 10:11:12 HOST service [xxxxx] - Logged message.... Dec 1 13:09:20 HOST service [xxxxx] - Logged message.... [peter@aasen ~]$ Lenke til kommentar
p0ker Skrevet 4. desember 2008 Forfatter Del Skrevet 4. desember 2008 (endret) Jeg har prøvd, men fikk det ikke til. Jeg ser tankegangen i scriptet, men får det forsatt ikke til å fungere. date -d ser ikke til å fungere som forventet. fra man date så ser jeg at -d skal være; -d dst Set the kernel's value for daylight saving time. If dst is non- zero, future calls to gettimeofday(2) will return a non-zero for tz_dsttime. Regner med det er gettimeofday som nøkkel ordet her... Men jeg får nemlig ./script.sh: line 13: [: -gt: unary operator expect når jeg kjører script snutten... Får heller ikke forventet svar når jeg kjører `date -d "Dec 04 11:17 1228385858", får da bare beskjed om at "usage: date .......) så er tydeligvis feil format.. Skal tittet litt på det senere, men har noen en god ide så si gjerne i fra. Endret 4. desember 2008 av p0ker Lenke til kommentar
x871kx6167ss7 Skrevet 4. desember 2008 Del Skrevet 4. desember 2008 Post det du har til nå, da. Kan se ut som vi har forskjellige versjoner av date eller noe... -d, --date=STRING display time described by STRING, not ‘now' Lenke til kommentar
p0ker Skrevet 4. desember 2008 Forfatter Del Skrevet 4. desember 2008 Post det du har til nå, da. Kan se ut som vi har forskjellige versjoner av date eller noe... -d, --date=STRING display time described by STRING, not ‘now' Er fra en FreeBSD 7.0 Server, så date er forskjellig ja. Har ikke fått sett noe mer på det enda. Skal ta en titt på det i kveld. Lenke til kommentar
p0ker Skrevet 9. desember 2008 Forfatter Del Skrevet 9. desember 2008 Har tittet mer på problemet, og kommer fortsatt ikke videre. Skulle jeg bruke noe av måte du har tenkt her, så er jeg manuelt nødt å gjøre ut regningen. if [ $1 == "dec" ]; then month="xValue" fi Etc for alle mnd og da er jeg jo like langt. Ikke sikker på om det er mulig, uten å kode deg ihjel! Så da spør jeg igjen, noen andre gode forslag? (Er nesten sikker på at jeg kunne bygd et hus, på den tiden jeg har brukt for å google problemet...) Lenke til kommentar
x871kx6167ss7 Skrevet 9. desember 2008 Del Skrevet 9. desember 2008 (endret) Installerte freebsd i virtualbox og prøvde meg litt fram: #!/usr/local/bin/bash echo "reading file $1 ..." CURRENTTIME=`date +%s` CURRENTTIME=$(($CURRENTTIME-86400)) echo "current time $CURRENTTIME" while read line do set -- $line MONTH=$1 DAY=$2 TIME=$3 LINETIME=`date -j -f "%b %d %T" "$MONTH $DAY $TIME" "+%s"` if [ $LINETIME -gt $CURRENTTIME ]; then echo $line fi done < $1 Ser ut til å fungere, fikk ikke kopiert over, så kan være skriveleif. Du kan jo korte den en del ned pga alle variablene strengt tatt ikke er nødvendig. Endret 9. desember 2008 av Blackslash Lenke til kommentar
teflonpanne Skrevet 10. desember 2008 Del Skrevet 10. desember 2008 (endret) Date er ganske kult, du kan f.eks skrive YESTERDAY=$(date -d "24 hours ago" '+%s') for å få tiden for 24 timer siden. Eller "2 days ago" "3 years ago" osv, så slipper man å regne. Man finner mye morsomt i info date Endret 10. desember 2008 av teflonpanne Lenke til kommentar
p0ker Skrevet 17. desember 2008 Forfatter Del Skrevet 17. desember 2008 (endret) Var en lite skriveleif; #!/usr/local/bin/bash echo "reading file $1 ..." CURRENTTIME=`date +%s` CURRENTTIME=$(($CURRENTTIME-86400)) echo "current time $CURRENTTIME" while read line do set -- $line MONTH=$1 DAY=$2 TIME=$3 LINETIME=`date -j -f "%b %d %T" "$MONTH $DAY $TIME" +"%s"` if [ $LINETIME -gt $CURRENTTIME ]; then echo $line fi done < $1 LINETIME=`date -j -f "%b %d %T" "$MONTH $DAY $TIME" +"%s"` Måtte dytte en " et hakk.. Men fikk det ikke til å funke med en gang. Har engelsk i fila jeg skal lese, og `date` spytter ut norsk.... Dvs at jeg fila jeg leser sier nå "dec" mens date vil ha "des"..... Litt usikker, men jeg mener å ha lest et eller anna sted at date kan manipulere for å bruker forskjellige tegnsett, Titter på det nå. I værstefall kan jeg kjøre case på $1 for å konvertere... Men takker for super hjelp! Nå har jeg faktisk noe jeg kan bruke. ***update** Jeg har jukset litt, tok en export... Endret 17. desember 2008 av p0ker Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå