On Die, Mai 15, 2001 at 07:40:11 +0200, Sebastian Helms wrote:
ich versuche, nachzuvollziehen, wann und wielange ich online bin.
Dabei weiß ich nicht ob es dafür schon fertige Lösungen gibt; kennt jemand welche?
isdnrep?
Ich versuche es folgendermaßen: ein Skript (ip-up.local) gibt mit
echo + `/bin/date +'%m %d %H %M %S'` >> /var/log/online
(und echo - ...) die Zeitpunkte aus, zu denen on-/offline gegangen wird.
Damit habe ich schon mal die Zeiten, jetzt suche ich noch die akkumulierte Zeit.
Mein erster Versuch mit Perl berechnet über Date::Calc:Delta_DHMS() die einzelnen Onlinezeiten, das funktioniert auch. Die liegen dann als ($d $h $m $s) vor.
Ich komme aber nicht weiter bei dem Versuch, diese einzelnen Zeiten - am besten monatlich getrennt - aufzuaddieren. Ich habe versucht, das mit Add_Delta_DHMS() zu machen, aber das hat nicht so ganz geklappt, da ja DHMS zu einem festen Datum addiert wird.
Hat jemand eine Idee / eine Lösung parat? Oder - wenns das schon gibt - als fertiges Paket?
Wenn isdnrep für Dich nicht in Frage kommt, warum addierst Du mühsam die einzelnen Datum-Bestandteile? Warum nicht gleich mit Sekunden rechnen, die kann man problemlos addieren, subtrahieren und dann in Minuten, Stunden, ... umrechnen. Also date +"%Y-%m %s" >>/var/log/online (Jahr und Monat am Anfang zum Sortieren nach Monaten) und dann bei der Auswertung einfach die Sekunden addieren. Umrechnen geht dann mit normalen Rechenoperationen: <ungetestet> zeit_berechnen () { zeit=$1 min=`expr $zeit / 60` sek=`expr $zeit - $min \* 60` if [ $min -gt 59 ]; then std=`expr $min / 60` min=`expr $min - $std \* 60` else std=0 fi if [ $std -gt 23 ]; then tag=`expr $std / 60` std=`expr $std - $tag \* 60` else tag=0 fi # Berechnung fertig: Ausgeben echo -n "Monat: $2 Online-Zeit $tag Tage, $std Stunden, " echo -n "$min Minuten, $sek Sekunden" } v_monat= # Vergleichsmonat fuer Ausgabe zeit=0 # kumulierte Zeit while read monat sekunden; do # Monatswechsel: Ausgabe if [ -n "$v_monat" -a ! \( "$monat" = "$v_monat" \) ]; then zeit_berechnen $zeit $monat # Nullen zeit=0 v_monat=$monat fi zeit=`expr $zeit + $sekunden` done