DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   Server status (http://www.devprotalk.com/showthread.php?t=119)

twix 24. 07. 2005. 22:21

Server status
 
Ovo moze slobodno da ide u i linux sekciju ;)
Konkretno zanima me kako bi isao output za status servera, pokrenutih servisa i njihov uptime (znaci koliko dugo je vec aktivan taj daemon, tipa apache)

Kôd:

<?php

function checkd($daemon,$name) {
  $ps ="ps ax | grep $daemon | wc -l";
  $origps = exec($ps);
  $minone = $origps-2;
  if ($minone<1) {
      $dataps = "only <b><font color=red>$minone</font> daemon</b> for <b>$daemon</b>,
      <br><b><font color=red>$name TOTALY DOWN</font></b><br>";
      }
  if ($minone==1) {
      $dataps = "<b><font color=blue>up</font></b> only with <b><font color=red>$minone</font> $daemon daemon</b><br>";
      }
  if ($minone>1) {
      $dataps = "<b><font color=blue>up</font></b> with <b><font color=red>$minone</font> $daemon daemons</b><br>";
      }
      return $dataps;
}
echo checkd("mysqld","mysql daemon");
echo checkd("httpd","httpd daemon");
?>

Ovo je jednostavan example koji sam nasao, ali ne znam kako tacno ide u linuxu komanda za proveru uptime-a nekog procesa, da tako kazem :(

nixa 25. 07. 2005. 02:11

uhm .. znam da beše neko čudo koje je to radilo i to je open sorce .. ček da se javi bluesman on je radio sa tim

bluesman 25. 07. 2005. 04:10

Ja sam se samo igrao sa server load, pokušavao sam da iz PHP saznam koji je load servera. Hteo sam dobijene podatke da koristim za neki simple "load balancing". Nisam došao do pouzdanog rešenja, možda zato što mi fali malo advanced linux znanja.

A ovo je malo tricky, ako je apache, myslq ... down, velika je šansa i da je ceo server down a onda je nelogično izvršavati script na serveru koji je verovatno down. Ja sam imao drugu ideju, da na drugom serveru slušam neki treći server... ali nisam išao dalje od ideje.

twix 25. 07. 2005. 18:46

Server load, etc.

Kôd:

<?php

// VHost Address...

$vHost = @getenv(SERVER_NAME);

if (!$vHost) {

  $vHost = "(N/A)";

}

// Host Server Name...

$fp = @fopen("/proc/sys/kernel/hostname","r");

if ($fp) {

$serverName = trim(fgets($fp, 4096));

$serverName = gethostbyname($serverName);

$serverName = gethostbyaddr($serverName);

fclose($fp);

} else {

$serverName = "(N/A)";

}

// Server or Dedicated IP...

$IPAddress = getenv("SERVER_ADDR");

// Operating system...

$fp = @fopen("/proc/version", "r");

if ($fp) {

$temp = fgets($fp);

fclose($fp);

if (preg_match("/version (.*?) /", $temp, $OSArray)) {

$kernel = $OSArray[1];

preg_match("/[0-9]{5,} (\((.* *)\)\))/", $temp, $OSArray);

$flavour = $OSArray[2];

$operatingSystem = $flavour." (".PHP_OS." ".$kernel.")";

if (preg_match("/SMP/", $buf)) {

$operatingSystem .= " (SMP)";

  }

} else {

    $result = "(N/A)";

  }

} else {

  $result = "(N/A)";

}

// Users and load information...

$rawUptime = trim(exec("uptime"));

if ($rawUptime) {

  if (preg_match("/, *(\d) (users?), .*: (.*), (.*), (.*)/", $rawUptime, $uptime)) {

    $users[0] = $uptime[1];

    $users[1] = $uptime[2];

    $loadNow = $uptime[3];

    $load15 = $uptime[4];

    $load30 = $uptime[5];

  }

} else {

  $users[0] = "Unavailable";

  $users[1] = "--";

  $loadNow = "Unavailable";

  $load15 = "--";

  $load30 = "--";

}

// CPUs Stuff...

$fp = @fopen("/proc/cpuinfo", "r");

if ($fp) {

  while ($temp = fgets($fp, 4096)) {

    $temp = trim($temp);

    $thing = preg_split("/\s+:\s+/", $temp, 2);

    switch ($thing[0]) {

      case "model name":

        $CPUModel = $thing[1];

        break;

      case "cpu MHz":

        $CUPSize = sprintf("%.2f", $thing[1]);

        break;

      case "cycle frequency [Hz]":

        $CUPSize = sprintf("%.2f", $thing[1] / 1000000);

        break;

      case "bogomips":

        $BOGO += $thing[1];

        break;

      case "processor":

        $CPUs += 1;

        break;

    }

  }

fclose($fp);

} else {

  $CPUModel = "(Not Available)";

  $CUPSize = "--";

  $BOGO = "--";

  $CPUs = "--";

}

?>

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE><?=$_GET[server]?> Statistics</TITLE>
</HEAD>
<BODY>

<P><B>Server Statistics (<?=$_GET[server]?>):</B><FONT color="#808080"><BR>

<?=$vHost?> </FONT>on <FONT color="#808080"><?=$serverName?> </FONT>(<FONT color="#808080"><?=$IPAddress?></FONT>)<BR>

Running <FONT color="#808080"><?=$operatingSystem?></FONT>; <FONT color="#808080"><?=$users[0]?> </FONT>current active <?=$users[1]?>.<BR>

With <FONT color="#808080"><?=$CUPs?></FONT> CPU: <FONT color="#808080"><?=$CPUModel?></FONT>

<SMALL>(actual measured speed: <FONT color="#808080"><?=$CUPSize?>KHz - <?=$BOGO?> bogomips</FONT>)</SMALL>.<BR>

Current load: <FONT color="#808080"><?=$loadNow?></FONT>; 15 minute load average: <FONT color="#808080"><?=$load15?></FONT>; 30 minute load average: <FONT color="#808080"><?=$load30?></FONT>.</P>

</BODY>
</HTML>

Pomoci ce ti ovo parce code-a ;)

E sad posto ja ne znam programiranje, znam sta i kako radi, ali nazalost ne znam sam da napisem svoj code, trebao bi mi status kao onaj na jabber.elitsecurity.org, znaci koliko dana, sati, minuta je neki daemon podignut.

Ehh da imam vase php znanje :(

bluesman 25. 07. 2005. 19:22

Na žalost, na prvi pogled ovaj tvoj kod radi samo na specijalnim i prilično "bušnim" serverima. Tako da bi ti na "bezbednijim" ili "paranoičnijim" serverima, recimo
PHP kôd:

$fp = @fopen("/proc/sys/kernel/hostname","r"); 

Automatski generisao grešku da nemaš prava pristupa.

Zato kažem da nisam našao zadovoljavajuće rešenje.

twix 25. 07. 2005. 19:52

Kôd:

twix@twixbox:/var/www # ps -eo etime,cmd | grep "apache2"
  01:15:57 /usr/sbin/apache2 -k start -DSSL
  01:15:56 /usr/sbin/apache2 -k start -DSSL
  01:15:56 /usr/sbin/apache2 -k start -DSSL
  01:15:56 /usr/sbin/apache2 -k start -DSSL
  01:15:56 /usr/sbin/apache2 -k start -DSSL
  01:15:56 /usr/sbin/apache2 -k start -DSSL
  01:13:02 /usr/sbin/apache2 -k start -DSSL
  01:06:22 /usr/sbin/apache2 -k start -DSSL
      00:00 grep apache2
twix@twixbox:/var/www #

E sad, kako da splitujem ovo, kako se vec kaze, da mi izbaci

Apache je pokrenut 1 sat i 15 minuta .

E sad, ne znam kako ce to da bude ako je pokrenut recimo 20 dana, kako da ispise:

Apache je pokrenut 20 dana, 1 sat i 15 minuta .

Sto se tice cat /proc/sys/kernel/hostname moguce da na nekim serverima ne mozes to da pogledas, ali do sada nisam naisao na sistem gde je to zabranjeno, ako nista, barem:

twix@twixbox:/var/www # uname -a
Linux twixbox 2.6.10-5-386 #1 Tue Apr 5 12:12:40 UTC 2005 i686 GNU/Linux
twix@twixbox:/var/www #


Hvala,

marinowski 25. 07. 2005. 19:53

Ne mogu baš da nađem opravdanje i razumevanje za prikaz informacije o uptimeu procesa. Obično je to irelevantno za korisnika, interesantno je eventualno za administratore koji ionako to mogu videti na drugi način. Jeste dugačak uptime ponos, ali ne govori mnogo.

Doduše, ima i primera kada je prikazana sistemska informacija korisna: primer je (inače odličan) sajt http://www.sxc.hu/ ... Tamo prikazuju koliko je opterećenje servera, pa se korisnik moli da se obuzda ukoliko vidi da je dogorelo do nokata :)

A za load balancing servera svakako treba jača artiljerija od običnog php-a.

marinowski 25. 07. 2005. 20:45

Ali ajde da budem konstruktivan: ovo ce ti resiti posao:

Kôd:

<?
$process = 'apache';
$uptime = exec("ps -eo etime,cmd T| grep $process |head -1 |cut -f 1 -d '/'");
if (preg_match("/(\d*)-?(\d\d):(\d\d):(\d\d) *$/",$uptime, $m)) {
    $dan = $m[1]?"$m[1] dana":'';
    $sat = $m[2]?"$m[2] sati":'';
} else {
    preg_match("/(\d*)-?(\d*):?(\d\d):(\d\d) *$/",$uptime, $m);
}

print "$process je pokrenut: $dan $sat $m[3] minuta $m[4] sekundi";

?>

Nije najelegantnije, ali radi sa svim outputima, makar proces radio minute, sate, ili dane. Oprez! ovo ti na nekim sistemima nece raditi, npr. na FreeBSD-u, tamo je ps komanda drugacija.

twix 25. 07. 2005. 22:35

Zigor hvala puno, ovo mi je trebalo!

Citat:

btw:

"Ne mogu baš da nađem opravdanje i razumevanje za prikaz informacije o uptimeu procesa. Obično je to irelevantno za korisnika, interesantno je eventualno za administratore koji ionako to mogu videti na drugi način. Jeste dugačak uptime ponos, ali ne govori mnogo."
Ovo i radim za jednog druga koji odrzava neki server, treba mi da uradim info o servisima, ali postoji i info strana za korisnike, gde mogu da vide recimo da li je aktivan jabber server i koliko dugo je pokrenut ;)

Hvala jos jednom, pozdrav..

nixa 26. 07. 2005. 00:35

pa ne moras da tako gledas da li je aktivan jabber server ... direktno komuniciraj sa jabberd-om ;)


Vreme je GMT +2. Trenutno vreme je 03:52.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.