[bash] Kijken of een webserver online is zonder ping?

Pagina: 1
Acties:

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 02-10-2023
Een kennis van mij heeft gevraagd of ik op mijn Linux server een bash-script wil draaien om af en toe te kijken of zijn webserver nog online is. Als dat niet het geval is wil hij graag een mailtje ontvangen.

Het probleem is dat z'n router niet reageert op een ping, en al zou ie dat doen dan zegt dat niets over de status van z'n server (achter de router.)

Ik heb al wat in elkaar gevogeld wat wel werkt als ik m handmatig uitvoer, maar niet vanuit cron :(

Iemand suggesties of aan-, opmerkingen?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

rm -f ping.txt
wget -q http://www.host.net/ping.txt

echo Uitgevoerd op `date` >> ~/onlinecheck/log.log

if [ -e "ping.txt" ]
  then
    echo "Geslaagd"
  else
    echo "host.net/ping.txt niet berijkbaar" | mail -s "Host niet berijkbaar" "mail@host.net"
fi


Ik wist helaas geen andere oplossing, vandaar het wget idee :D

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 21:51

Kettrick

Rantmeister!

Misschien dat je PATH niet goed staat in je cron, dan moet je even het volledige pad opgeven naar wget.

Krijg je geen mail van je cron dat er iets fout gaat ?, of staat er verder niets in je logs ?

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 02-10-2023
Ik krijg en geen mail en die log.log wordt niet gemaakt.

Sorry, had duidelijker moeten zijn

Verwijderd

Misschien is een wat minder omslachtige manier om te kijken naar nmap. Nmap kan bv een TCP ping doen, of je kijkt de of de port 80 van de host die je wil controleren up is.

  • Rac-On
  • Registratie: November 2003
  • Niet online
Waarom doe je niet een lynx -dump > $file?

Dan kun je vervolgens de inhoud van $file doorzoeken (grep $file, "een woord wat wel op de pagina staat, maar niet op een 404 error" | wc -l).
Als daar meer dan 0 uitkomt, dan is het ok?

Als je wil, kan ik het wel wat verder voor je uitwerken, maar ik denk dat je hiermee een heel eind kan komen.

[ Voor 6% gewijzigd door Rac-On op 16-03-2004 09:53 ]

doet niet aan icons, usertitels of signatures


  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 21:51

Kettrick

Rantmeister!

Je zou ook kunnen overwegen om een monitor tooltje te installeren alla big-brother ( http://bb4.com/ ), maar dat is misschien weer een beetje overdreven..

heb je wel stats :9 ;)

Verwijderd

waarom niet gewoon met nmap een poortscan op poort 80?
nmap -p80 www.jouw-server.nl

offtopic:
of ik ben langzaam, of het is gewoon druk :)

[ Voor 28% gewijzigd door Verwijderd op 16-03-2004 09:55 ]


  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 01-02 20:46

dawuss

gadgeteer

Sowieso controleer je nu of zijn apache (of andere) webserver online is, en niet de server zelf, maar dat even terzijde.
Ik denk dat de suggestie van Fl4sh3r tot nu toe het beste is :)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Verwijderd

dawuss schreef op 16 maart 2004 @ 09:55:
Sowieso controleer je nu of zijn apache (of andere) webserver online is, en niet de server zelf, maar dat even terzijde.
Ik denk dat de suggestie van Fl4sh3r tot nu toe het beste is :)
niet mee eens, met de nmap methode heb je veel meer vrijheid.
je hoeft je immers niet te beperken tot enkel httpd.
je kun ook nog kijken of ssh en/of andere services nog runnen.
en mocht 1 of meerdere van deze services dan down zijn, kun je dit melden in dat mailtje.

en of de bak zelf physiek nog aan het netwerk hangt is helemaal niet zo intressant.
immers als ssh/ftp/http down zijn. maakt dat opzich niet ze veel meer uit :)

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 02-10-2023
Allemaal, bedankt voor jullie reacties :)

Maar het wil nog niet lukken...

Misschien iemand die een voorbeeld kan/wil maken?

Dit is overigens mn crontab regel (mss zit daar de fout):
10 * * * * ~/onlinecheck/host.sh

Die 10 * * * * is alleen even om te testen..

Ben wel nieuwsgierig naar de method waar StratoS_V2.0 het over heeft, zodat ik niet alleen z'n http maar ook ftp, etc kan checken

[ Voor 20% gewijzigd door Fl4sh3r op 16-03-2004 10:12 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 16:37

Robtimus

me Robtimus no like you

Fl4sh3r schreef op 16 maart 2004 @ 10:09:
Dit is overigens mn crontab regel (mss zit daar de fout):
10 * * * * ~/onlinecheck/host.sh
Maak van die ~/onlinecheck/host.sh eens /home/<user>/onlinecheck/host.sh

Want wat is ~ voor de user die cron uitvoert? De homedir van de user van de crontab, de homedir van cron zelf, ??
Ben wel nieuwsgierig naar de method waar StratoS_V2.0 het over heeft, zodat ik niet alleen z'n http maar ook ftp, etc kan checken
nmap is een poortscanner, dus je kijkt gewoon of die poorten bereikbaar zijn. Je moet dacht ik wel -P0 bij je opties zetten omdat de machine niet reageert op pings.

[ Voor 30% gewijzigd door Robtimus op 16-03-2004 10:22 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Fl4sh3r schreef op 16 maart 2004 @ 10:09:
Allemaal, bedankt voor jullie reacties :)

Maar het wil nog niet lukken...

Misschien iemand die een voorbeeld kan/wil maken?

Dit is overigens mn crontab regel (mss zit daar de fout):
10 * * * * ~/onlinecheck/host.sh

Die 10 * * * * is alleen even om te testen..

Ben wel nieuwsgierig naar de method waar StratoS_V2.0 het over heeft, zodat ik niet alleen z'n http maar ook ftp, etc kan checken
Gewoon nmap laten scannen op 21,22,80 (en alle andere services die jij wil), dan gewoon kijken wat de reactie van nmap is en daar op reageren :) niet zo gekke moeilijk toch?

  • j-w
  • Registratie: Augustus 1999
  • Niet online

j-w

gebruik nog ff de spellingscontrole voor de tekst

[ Voor 19% gewijzigd door j-w op 16-03-2004 10:25 ]


  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 02-10-2023
~/ werkt wel voor een andere job in diezelfde cron

Maar ik geloof dat het nu werkt... ik weet helaas niet precies wat ik veranderd heb :S maar het werkt :)

hoe kan ik de reactie van nmap controleren in een bash-script?

[ Voor 27% gewijzigd door Fl4sh3r op 16-03-2004 10:25 ]


Verwijderd

naja, tis gewoon nmap.
die geeft output als volgt.
stratos@slaptop:~$ nmap -p80,25 localhost

Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-03-16 10:16 CET
Interesting ports on localhost (127.0.0.1):
PORT STATE SERVICE
25/tcp closed smtp
80/tcp open http

Nmap run completed -- 1 IP address (1 host up) scanned in 0.416 seconds
dus met een
nmap -p80,25 localhost | grep tcp | grep closed

bash scripting is niet echt mijn beste punt maar in perl zou je iets kunnen doen als.
code:
1
2
3
4
5
6
7
#!/usr/bin/perl
                                                                                                                               
if (`nmap -p80 localhost | grep tcp`=~/closed/) {
        print "hoi";
}else {
        print "niet hoi";
}


(dit is zomaar even snel, en alles behalve perfect, of zelfs gewild :) )

Verwijderd

Als je het echt goed wil aanpakken gebruik dan een programma als monit. Deze kan ook een email sturen als de webserver down is, maar het ook herstarten als het moet. Er zitten voorbeeldjes bij voor poort 80.

code:
1
2
3
check host xyzzy with address xyzzy.org
       if failed port 80 proto http then alert
       alert foo@bar


http://www.tildeslash.com/monit/

monit - A utility for monitoring and managing daemons or similar programs

monit is a utility for monitoring and managing daemons or similar programs running on a Unix system. It will start specified programs if they are not running and restart programs not responding.

Of alleen een email in 1 regel:
code:
1
lynx -dump www.bestaatnietbla.nl > /dev/null 2>&1 || date | mailx -s "Site down"  mail@host.net

[ Voor 24% gewijzigd door Verwijderd op 16-03-2004 10:53 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 16 maart 2004 @ 10:40:
Als je het echt goed wil aanpakken gebruik dan een programma als monit. Deze kan ook een email sturen als de webserver down is, maar het ook herstarten als het moet. Er zitten voorbeeldjes bij voor apache.

[...]
Dan mis je dus de kern van dit topic; het moet remote gebeuren ;)

[ Voor 50% gewijzigd door Spider.007 op 16-03-2004 10:44 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Wilke
  • Registratie: December 2000
  • Laatst online: 00:03
Gebruik sowieso NOOIT relatieve paden in je crontab of scripts die door cron aangeroepen worden. Het is sowieso een security risk, en daarvan afgezien heb je dus dit soort ellende, dat dingen niet werken omdat het pad dan net ff anders is dan in je eigen shell.

Dus begin eens met de paden naar elk prog wat je aanroept (wget etc.) absoluut te maken. Dit is al door meer mensen opgemerkt, maar zolang TS daar niet mee begint kunnen we verder wel ophouden denk ik.

  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
Ik zou met wget een head request doen (Kan hij vast wel) en de return code uitlezen.
($?) in bash. 0 bij succes, en 1 bij error.

Als je 0 krijgt weet je zeker dat het werkt.
De lynx -dump optie is ook mogelijk. Ook dan return code uitlezen.

  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 19-02 14:54

RvdH

Uitvinder van RickRAID

Ik vind de methode die de topicstarter gebruikte nog wel de mooiste van allemaal (okee, een HEAD ipv GET is misschien nog efficienter). Nmap is een veels te 'zwaar' programma om voor dit soort doeleinden te gebruiken. Poort 80 zal altijd open staan, omdat die (als ik het goed begrepen heb) geforward wordt door een router naar de echte webserver, en dan heb je dus niets aan nmap. De enige manier om te controleren of een webserver online is, is je voordoen als een client: wget.

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 02-10-2023
hm... jammer dat ik nu net lees dat nmap te 'zwaar' is |:(

Ik kan het me wel voorstellen, maar aan de andere kant is het nu wel mogelijk om meerdere poorten te checken. Hieronder mijn huidige script. Ik hoor graag op- of aanmerkingen.

Bovendien wil ik graag weten of het mogelijk is om alle output van nmap te 'dumpen' of onderscheppen. Ik krijg nu steeds een mailtje met de waarschuwing "Warning: You are not root -- using TCP pingscan rather than ICMP". Deze is ook zichtbaar met "nmap -p80 host > /dev/null" en "nmap -sT -p80 host > /dev/null".

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/perl

# hostname and ports
$host = "host.nl";
@ports = (21,22,80,110);

# address to deliver status to
$to = "user\@mail.nl";

# file to store the offline services (piped)
$offlinefile = "offline.pip";

# 0 or 1, if 1 mail is always sent
# if 0 only sent if error(s)
$sendthemail = 0;

# location to sendmail
$sendmail = "/usr/sbin/sendmail -t";

#################
# end of config #
#################

print "Script ran " . `date` . "\n";

$mail  = "From: no-replay\@myhost.nl\n";
$mail .= "To: $to\n";
$mail .= "Subject: Offline services of $host\n";
$mail .= "Content-type: text/html\n\n";
$mail .= "Offline services on " . `date` . "\n";

if(open(FILE,$offlinefile))
{
    @offline = split(/\|/, <FILE>);
    close(FILE);
    chomp(@offline);
}

$nmapports = join(",",@ports);
@nmap = split(/\n/, `nmap -p$nmapports $host | grep tcp`);

foreach $port (@ports)
{
    ($line) = grep(/$port/, @nmap);

    chomp($line);
    $line =~ s/(\d*)\/(\S*)\s*(\S*)\s*(\S*)/$1\|$2\|$3\|$4/;
    ($nport,$protocol,$state,$type) = split(/\|/, $line);
        
    if($state eq "open")
    {
        print $line . " OPEN\n";
    } else {
        $mail .= "Offline: $port ($protocol) $type\n"; 
        print $line . " port:$port CLOSED\n";
        $newstring .= ((length($newstring)>0)?"|":"") . $port;
        
        if(!$sendthemail) {
        $found = 0;
        foreach $offport (@offline)
        {
            #print "offport: $offport port: $port\n";
            $found = 1 if ($offport eq $port);
        }
        $sendthemail = 1 if(!$found);
        }
    }
}

open(FILE,">" . $offlinefile);
print FILE $newstring;
close(FILE);

if($sendthemail)
{
    open (SENDMAIL, "|$sendmail") || die "Could not open sendmail: $!";
    print SENDMAIL $mail;
    close (SENDMAIL);

    print "Sendmail:\n$mail";
}

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Fl4sh3r schreef op 17 maart 2004 @ 16:25:

Bovendien wil ik graag weten of het mogelijk is om alle output van nmap te 'dumpen' of onderscheppen. Ik krijg nu steeds een mailtje met de waarschuwing "Warning: You are not root -- using TCP pingscan rather than ICMP". Deze is ook zichtbaar met "nmap -p80 host > /dev/null" en "nmap -sT -p80 host > /dev/null".
Bij unix zijn er 2 wegen voor programma's om output naar toe te sturen, stdout en stderr. stdout voor normale output, en stderr voor errors en andere diagnostische zaken. > zonder verdere toevoeging redirect alleen stdout, stderr gaat dan nog wel naar je mail van cron dus. Met 2>/dev/null redirect je stderr ook naar /dev/null (2 staat voor filedescriptor nr2, 1 is stdout, 2 is stderr), zie ook man bash over redirecting.

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Fl4sh3r schreef op 17 maart 2004 @ 16:25:
hm... jammer dat ik nu net lees dat nmap te 'zwaar' is |:(

[..]
[/code]
NMap biedt daarentegen wel de mogelijkheid om meerdere poorten te scannen (meer dan alleen 80), wat een alternatief als wget niet kan. Ik denk dat voor het doel waarvoor jij NMap wil gebruiken dat het echter niet _te_ zwaar is :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 02-10-2023
bedankt allemaal :)

het werkt helemaal naar ons zin

  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 19-02 14:54

RvdH

Uitvinder van RickRAID

Fl4sh3r schreef op 17 maart 2004 @ 18:29:
bedankt allemaal :)

het werkt helemaal naar ons zin
Heb je het getest als ie zn webserver uit zet? Want volgens mij houdt die router poort 80 gewoon open ook al staat zn webserver uit..

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 02-10-2023
Z'n router houdt m dan idd open, maar ik krijg geen "open" als replay...

Ik krijg zo'n melding in de geest van "(The 1 port scanned but not shown below is in state: closed)"
Pagina: 1