Avatar billede syswatch Novice
08. maj 2003 - 15:31 Der er 11 kommentarer og
1 løsning

FreeBSD Server uptime ?

Hejsa...
Jeg kører FreeBSD 4,8, og vil gerne have et script der viser min uptime som: 1 Day, 6 Hours, 11 Min

Jeg har prøvet mig lidt frem med system("uptime"), men det skal vel formatteres en del...

Hjælp ?
Avatar billede lauer Nybegynder
08. maj 2003 - 15:37 #1
Dette skulle angive uptime i sekunder.

print exec("sysctl -n kern.boottime");
Avatar billede istasi Nybegynder
08. maj 2003 - 15:40 #2
http://istasi.dk/istasi.dk/php/posix/uptime.php <- du kunne prøve at kigge lidt på denne ...
hvis den bliver modificeret lidt bliver den jo som du vil ha den :)
Avatar billede syswatch Novice
08. maj 2003 - 15:40 #3
Ja, og en masse andet... men den skulle gerne formatteres så den skrev i dage og time og min...
Avatar billede lauer Nybegynder
08. maj 2003 - 15:40 #4
hmm, det giver i hvert fald den tid hvor serveren blev tændt.
Denne lille funktion skulle returner tiden den har været oppe i sekunder.

function sys_uptime ()
{
    if ($e = exec("sysctl -n kern.boottime")) {
        $s = explode(' ', $e);
        $a = ereg_replace('{ ', '', $s[3]);
        $cat = time() - $a;
                     
        $uptime = split(' ', $cat);
       
        $uptime = trim($uptime[0]);
        return $uptime;
    } else {
        return;
    }
}
Avatar billede lauer Nybegynder
08. maj 2003 - 15:42 #5
du kan også bruge denne funktion til at lave sekunder op til dage/timer/min

function sec_to_time($uptime)
{
    if (!empty($uptime)) {
   
        $sek = $uptime;
        $min  = $sek / 60;
        $hours = $min / 60;
        $days  = floor($hours / 24);
        $hours = floor($hours - ($days * 24));
        $min  = floor($min - ($days * 60 * 24) - ($hours * 60));
        $sek  = floor($sek - ($min * 60) - ($days * 60 * 24 * 60) - ($hours * 60 * 60));
       
        if ($days == 1) $result .= "$days dag ";
        elseif ($days > 1) $result .= "$days dage ";
         
        if ($hours == 1) $result .= "$hours time ";
        elseif ($hours > 1) $result .= "$hours timer ";
   
        if ($min == 1) $result .= "$min minut ";
        elseif ($min > 1) $result .= "$min minutter ";
   
        if ($sek == 1) $result .= "$sek sekund ";
        elseif ($sek > 1) $result .= "$sek sekunder ";
   
        return $result;
    } else {
        return;
    }
}
Avatar billede syswatch Novice
08. maj 2003 - 15:47 #6
Machomann: Ok, det er fint, men jeg får slet ikke noget resultat af den første du skrev..... ligesom den ikke vil køre den function du har lavet.
Avatar billede tipsen Nybegynder
08. maj 2003 - 15:52 #7
sys: Hvad har du prøvet?
Avatar billede syswatch Novice
08. maj 2003 - 15:53 #8
Jeg satte dette ind i mit script....

function sys_uptime ()
{
    if ($e = exec("sysctl -n kern.boottime")) {
        $s = explode(' ', $e);
        $a = ereg_replace('{ ', '', $s[3]);
        $cat = time() - $a;
                     
        $uptime = split(' ', $cat);
       
        $uptime = trim($uptime[0]);
        return $uptime;
    } else {
        return;
    }
}
Avatar billede lauer Nybegynder
08. maj 2003 - 15:54 #9
du skal jo også lige udskrive den.

print sys_uptime();
Avatar billede syswatch Novice
08. maj 2003 - 16:06 #10
Ok.. ja, selvfølgelig.. men skal jeg så bare sætte det andet i forlængelse af det andet eller hvad ? For hvis jeg gør det, så kommer den med en fejl...
Avatar billede syswatch Novice
08. maj 2003 - 16:15 #11
Jeg fandt ud af at sætte det hele sammen, og her er det vis andre brug for det.
Mange tak til Machoman.....

function sys_uptime ()
{
    if ($e = exec("sysctl -n kern.boottime")) {
        $s = explode(' ', $e);
        $a = ereg_replace('{ ', '', $s[3]);
        $cat = time() - $a;
                     
        $uptime = split(' ', $cat);
       
        $uptime = trim($uptime[0]);
        return $uptime;
    } else {
        return;
    }
}

$uptime = sys_uptime();

function sec_to_time($uptime)
{
    if (!empty($uptime)) {
   
        $sek = $uptime;
        $min  = $sek / 60;
        $hours = $min / 60;
        $days  = floor($hours / 24);
        $hours = floor($hours - ($days * 24));
        $min  = floor($min - ($days * 60 * 24) - ($hours * 60));
        $sek  = floor($sek - ($min * 60) - ($days * 60 * 24 * 60) - ($hours * 60 * 60));
       
        if ($days == 1) $result .= "$days dag ";
        elseif ($days > 1) $result .= "$days dage ";
         
        if ($hours == 1) $result .= "$hours time ";
        elseif ($hours > 1) $result .= "$hours timer ";
   
        if ($min == 1) $result .= "$min minut ";
        elseif ($min > 1) $result .= "$min minutter ";
   
        if ($sek == 1) $result .= "$sek sekund ";
        elseif ($sek > 1) $result .= "$sek sekunder ";
   
        return $result;
    } else {
        return;
    }
}

print sec_to_time($uptime);
Avatar billede tipsen Nybegynder
08. maj 2003 - 16:50 #12
i funktionen sec_to_uptime() bør du rette starten til:

$days  = (int) ($uptime/86400);
$hours = (int) (($uptime%86400)/3600);
$min  = (int) (($uptime%3600)/60);
$sek  = $uptime%60;

Har ikke lige testet det, men det skulle fungere og antallet af beregninger er væsentligt lavere end den oprindelige udgave - derfor vil det fungere hurtigere!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester