Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 15:32 Der er 40 kommentarer og
1 løsning

Skal bruge et link checker script (om server, oppe el. nede)

Jeg skal bruge et script som kan checke om en server er oppe eller nede, det skal kunne checker mange (over 50)

- Det skal ikke vise serveren hvis den er nede
- Kun jeg skal kunne tilføje serverne
- jeg skal kunne vælge hvilken port
- Scriptet skal sige hvor lang tid serverne har været online

Jeg er desværre ikke selv god nok til at lave det, men jeg tænkte det kunne laves sådan:

server.txt (txt men de servers som skal checkes, kunne også laves i mysql)
server.php (checker om den er online, lidt som http://www.dvdrip.dk/test/server.php men det skal kun være mig der kan tilføje server, og der skal være kunne være flere end en server, og at den skal vise hvor langtid de har været online i)

Nogen der kan lave sådan et?
Avatar billede dennismp Nybegynder
28. maj 2004 - 15:36 #1
Hvad mener du, når du siger at du vil tjekke om serveren er oppe?

Hvordan det? (Det kan være svært).. Skal den connect'e til port 80 ?
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 15:38 #2
http://www.dvdrip.dk/test/server.php ligesom her... den skal kunne connexte til alle slags porte
Avatar billede dennismp Nybegynder
28. maj 2004 - 15:40 #3
Har du mulighed for at bruge cron(tab) ?

Ellers bliver det svært at måle hvor længe en server hr været oppe hvis den ikke tjekkes reglmæssigt..
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 15:42 #4
cron(tab) - ved ikke hvad det er, men hvordan finder jeg ud af om jeg kan bruge det?

Men kunne man ikke bare lave et script som checker det f.eks. hver time?
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:00 #5
<?php
$servers = file('503695_servers.txt');

$out = fopen("503695_servers.txt","w");
if( $out ) {
    foreach($servers as $info) {
        print "INFO; $info<br>";
        list($host,$port,$uptime,$status) = explode("#",$info);

        $fp = @fsockopen($host,$port,$errno,$errstr,1);
        if( $fp ) {
            $uptime++;
            $status = 'UP';
        }
        else {
            $uptime = 0;
            $status = 'DOWN';
        }
        fwrite($out,"$host#$port#$uptime#$status\n");
        fclose($fp);
    }
    fclose($out);
}
else {
    print "Kan ikke skrive til servers.txt";
}
?>
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:02 #6
Formatet på server.txt (eller 503695_servers.txt jeg har kaldt den) er:
hostnavn#portnummer#antalokchecks#status

fx

eksperten.dk#80#8#UP

Hvis du tjekker hver time, så tager du 8*60 for at få antal minutter den tror serveren har været op. UP eller DOWN er aktuel status. Hvis serveren er nede, så bliver antalokchecks sat til 0.

pt. venter scriptet max 1 sekund for at få forbindelse.. Det kan være du skal sætte dne lidt op..
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:18 #7
den får problemer hvis den skal have en anden port

http://www.dvdrip.dk/test/server.php

ftp://ftp.dvdrip.dk/test/503695_servers.txt
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:20 #8
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:21 #9
Husk at filens må ikke køres på samme tid..

har scriptet selv smadret filen?
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:23 #10
ja den har selv smardret den :(
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:28 #11
Hvad skrev du i filen til at starte med? Jeg kan ikke genskabe problemet her..
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:29 #12
eksperten.dk#80
mobz.dyndns.dk#21
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:30 #13
ah det er lykkes mig nu, du får snart en ny fil :)
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:34 #14
Prøv med
eksperten.dk#80#0#NONE
mobz.dyndns.dk#21#0#NONE

og
<?php
$servers = file('503695_servers.txt');

$out = fopen("503695_servers.txt","w");
if( $out ) {
    foreach($servers as $info) {
        print "INFO; $info<br>";
        list($host,$port,$uptime,$status) = explode("#",$info);

        $fp = @fsockopen($host,$port,$errno,$errstr,1);
        if( $fp ) {
            $uptime++;
            $status = 'UP';
        }
        else {
            $uptime = 0;
            $status = 'DOWN';
        }
        fwrite($out,"$host#$port#$uptime#$status\n");
        fclose($fp);
    }
    fclose($out);
}
else {
    print "Kan ikke skrive til servers.txt";
}
?>
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:37 #15
sådan nu virker det... mange tak for det

btw. ville de være meget svært at lave sådan at den updatere  f.eks. hver time?
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:43 #16
jeg gætter på at du bruger et webhotel - normalt tillader de ikke at man bruger cron (som giver dig mulighed for at starte et script hver time)..  Så der er et par alternativer.

1) At få en anden maskine til at kalde scriptet hver time.
2) Hvis du har rimeligt med hits døgnet rundt, så kan du lave det sådan at ved hver hit på fx. forsiden så bliver datoen for sidste rettelse på server.txt-filen testet. Er den ældre end een time, så udføres en opdatering.. ellers ikke..
3) Noget jeg ikke har fantasi til ligenu :-)

Hvis det kun drejer sig om een gang i timen, kan jeg snildt gøre det for dig (kalde scriptet hver time). Men så er du afhængig af mig og min maskine (og at den er online).
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:47 #17
Hvordan kan jeg se om jeg kan bruge cron ?
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:50 #18
Hvis du har shell-adgang (telnet eller ssh) kan du prøve at skrive cron -l
Hvis du ikke har, så tvivler jeg på du har adgang til at bruge den.
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:51 #19
ok, men Mange tak for hjælpen...
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:53 #20
Du er velkommen til at smide en mail på dennis@moellegaard.dk - så kan jeg hurtigt sætte det op for dig. Så kan du altid undersøge om der er alternative måder at gøre det på .. evt snakke med dit webhotel.
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:54 #21
Lige en sidste ting...

kan du laver et scritp som kan bruge det info som ligger i '503695_servers.txt'

altså et script som henter '503695_servers.txt' og laver en en flot opsætning af det info. ?
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 16:54 #22
Mange tak for hjælpen
Avatar billede dennismp Nybegynder
28. maj 2004 - 16:58 #23
Jeg er ikke grafiker, men du kan da arbejde lidt på dette :)

<?php
$servers = file('503695_servers.txt');

foreach($servers as $info) {
list($host,$port,$uptime,$status) = explode("#",$info);

  print "Flot design her: $host på port $port har status $status<br>";
  print "Vi tror den har været oppe i $uptime timer<br>";
}
?>
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 17:30 #24
Tænkte på om du ville lave scriptet sådan at det updatere hver time

Altså når man åbner: index.php

<?php
$servers = file('503695_servers.txt');

foreach($servers as $info) {
list($host,$port,$uptime,$status) = explode("#",$info);

  print "Flot design her: $host på port $port har status $status<br>";
  print "Vi tror den har været oppe i $uptime timer<br>";
}
?>

checker den om der er gået en time, og hvis der er kører den server.php uden at man kan se det... ?
Avatar billede dennismp Nybegynder
28. maj 2004 - 17:36 #25
if( (time() - filemtime('503695_servers.txt')) > 3600 )
  include("filmedkodetilatopdaterer");

3600 er 1 time i sekunder - de kan bare rette den til det du ønsker.
Avatar billede dvdrip.dk Nybegynder
28. maj 2004 - 23:44 #26
Det virker næsten, der mangler bare lige det at den ikke skal vise den der er nede "down"

Kan du klare det?
Avatar billede dennismp Nybegynder
30. maj 2004 - 13:10 #27
<?php
$servers = file('503695_servers.txt');

foreach($servers as $info) {
  list($host,$port,$uptime,$status) = explode("#",$info);
  if( $status == 'UP' ) {
    print "Flot design her: $host på port $port har status $status<br>";
    print "Vi tror den har været oppe i $uptime timer<br>";
  }
}
?>
Avatar billede dvdrip.dk Nybegynder
30. maj 2004 - 16:13 #28
Det virker ikke :-(

http://dvdrip.dk/test/index.php
Avatar billede dennismp Nybegynder
30. maj 2004 - 16:44 #29
prøv:
<?php
$servers = file('503695_servers.txt');

foreach($servers as $info) {
  list($host,$port,$uptime,$status) = explode("#",$info);
  print "$info - status er: $status<br>";
  if( $status == 'UP' ) {
    print "Flot design her: $host på port $port har status $status<br>";
    print "Vi tror den har været oppe i $uptime timer<br>";
  }
}
?>
Avatar billede dvdrip.dk Nybegynder
30. maj 2004 - 19:05 #30
Det virker stadig ikke - http://dvdrip.dk/test/index.php
Avatar billede dennismp Nybegynder
30. maj 2004 - 19:28 #31
Ah nu tror jeg, jeg ved hvad der er galt. $status indeholder nok også et linjeskift.

Prøv
<?php
$servers = file('503695_servers.txt');

foreach($servers as $info) {
  rtrim($info);
  list($host,$port,$uptime,$status) = explode("#",$info);
  if( $status == 'UP' ) {
    print "Flot design her: $host på port $port har status $status<br>";
    print "Vi tror den har været oppe i $uptime timer<br>";
  }
}
?>
Avatar billede dvdrip.dk Nybegynder
30. maj 2004 - 20:47 #32
Den gamle: http://dvdrip.dk/test/index1.php
Den nye: http://dvdrip.dk/test/index.php

den virker stadig ikke :(
Avatar billede dennismp Nybegynder
30. maj 2004 - 20:58 #33
Hvordan ser din datafil ud?
Avatar billede dvdrip.dk Nybegynder
30. maj 2004 - 23:02 #34
Det er ligemeget hvad jeg ligger i datafilen så virker det ikke...

men nu ligger der:

linux.aliboom.com#6969#0#NONE
torrentmania.net#2711#0#NONE
Avatar billede dvdrip.dk Nybegynder
30. maj 2004 - 23:17 #35
Skrev lige jubii.dk#80 på også så jeg var sikker på at mindst en virkede, men så kigge jeg lige på datafilen efter jeg har kørt server.php, den ser ikke helt normalt ud:

linux.aliboom.com#6969#0#DOWN(firekant)torrentmania.net#2711#0#DOWN(firekant)jubii.dk#80#5#UP(firekant)
og så står det hele på en linie

(firekant) = er den firkant man ikke kan skrive her på exp

Mærkeligt er det gamle ( http://dvdrip.dk/test/index1.php )ligeglad men det er det nye ikke ( http://dvdrip.dk/test/index.php )
Avatar billede dennismp Nybegynder
30. maj 2004 - 23:39 #36
Kan jeg få et link til selve filen - så jeg kan se på hvad de firekanter er for et tegn?

Bruger du windows?
Avatar billede dvdrip.dk Nybegynder
31. maj 2004 - 00:43 #37
http://www.dvdrip.dk/test/503695_servers.txt - Download den og se det med notepad
Avatar billede dennismp Nybegynder
31. maj 2004 - 00:47 #38
Det er bare fordi det er unix-formatteret linjeskift. Det kan notepad ikke finde ud af.
Avatar billede dennismp Nybegynder
31. maj 2004 - 00:51 #39
Mig et fjols.


rtrim($info);

skal være

$info = rtrim($info);

.. det er bare ikke min dag :-)
Avatar billede dvdrip.dk Nybegynder
31. maj 2004 - 01:03 #40
Sådan nu virker det.... mange mange tak for hjælpen
Avatar billede dennismp Nybegynder
31. maj 2004 - 01:11 #41
Hehe - beklager de uklare svar til tider - Men det virker da i det mindst nu :).
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