středa 14. dubna 2010

Reálný uptime

Počítač restartuji pouze při aktualizacích kernelu a různých pokusech, jinak ho jen uspávám. Je to pohodlnější a, alespoň v případě mého stroje, je i spotřeba uspaného počítače stejná, jako vypnutého, či spíše naopak. Systém se tedy restartuje průměrně dvakrát do měsíce. Říkal jsem si, že by nebylo od věci, mít v Conky, krom klasického uptime, který zobrazuje celkový čas od bootu systému i čistý čas, po který je systém opravdu zapnutý. Google mi v tomto ohledu moc nepomohl, možná jsem se špatně ptal, tak jsem jedno triviální řešení napsal. ...





Základem jsou dva řádky v suspend/resume skriptu (o tom více v mém článku zde), které počítají celkovou dobu, po kterou byl počítač uspaný, v proměnné v adresáři /tmp, který se při restartu systému maže, čímž je zajištěno nulování čítače.

Řádek do suspend funkce:
[ -e /tmp/suspend-time ] || echo 0 > /tmp/suspend-time; date +%s >> /tmp/suspend-time

Řádek do resume funkce:
stime=$(echo "`cat /tmp/suspend-time|awk 'NR==1'`+((`date +%s`-`cat /tmp/suspend-time|awk 'NR==2'`)/60)"|bc); echo $stime > /tmp/suspend-time

S vytvořenou proměnnou pracuje skript, který od celkového uptime odečte celkovou dobu strávenou ve spánku a výsledek přepočítá na dny, hodiny a minuty.

real-uptime
#!/bin/bash

[ -e /tmp/suspend-time ] || echo "0">/tmp/suspend-time
uptime=$(echo "`cat /proc/uptime|awk '{print $1}'`/60-`cat /tmp/suspend-time`"|bc) # bc dává po dělení celočíselné výsledky, ale oproti expr mohou být vstupní hodnoty neceločíselné
days=$(expr $uptime / 1440) # $uptime je v minutách, den má 1440 minut
hours=$(expr $uptime % 1440 / 60) # % značí "modulo" - výsledkem je zbytek po dělení
minutes=$(expr $uptime % 60)
if [ "$days" -gt 0 ]; then echo "$days"d "$hours"h "$minutes"m
  elif [ "$hours" -gt 0 ]; then echo "$hours"h "$minutes"m
     else echo "$minutes"m
fi

Skript lze spouštět klasickým způsobem z terminálu, nebo jeho výstup použít třeba právě v Conky.
${execi 60 ~/.conky/real-uptime}

Žádné komentáře:

Okomentovat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.