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 ?
Annonceindlæg fra Infor
Dette skulle angive uptime i sekunder. print exec("sysctl -n kern.boottime");
Ja, og en masse andet... men den skulle gerne formatteres så den skrev i dage og time og min...
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; } }
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; } }
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.
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; } }
du skal jo også lige udskrive den. print sys_uptime();
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...
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);
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!
Vi tilbyder markedets bedste kurser inden for webudvikling