linuxxp
Goto Top

ping auf mehrere IPs, Ergebnisse in Datei ausgeben - bei Fehler Meldung (Ton bzw. Pop-UP)

Probleme mit dem Provider, laufende Überwachung der WAN-Anbindung und der externen Server.

Hallo liebe Administratoren und sonstige Forums-Mitglieder,

auf der Arbeit gibt es Probleme mit dem Internet-Provider. Daher möchte ich per PING die Erreichbarkeit mehrerer Server überwachen. Kann ich die "normale" Reaktionszeit einstellen (wie bei PING-Software möglich? OPTION). Die Ausgabe soll in eine Datei erfolgen (Datum und Uhrzeit, Server-IP und Reaktionszeit, Fehlermeldungen). Bei Fehlern (nicht erreichbar, Zeitüberschreitung) soll eine Meldung erfolgen (Pop-Up oder dergleichen) damit ich das Problem sofort erkennen und handeln kann.

Ich habe gegoogelt und herausgefunden, dass Batch-Scripte eine einfache Lösung sein soll. Daher meine Frage in diesem Forum. Die freien Programme geben leider a) die Daten nicht in eine Datei aus oder b) erstellen keine Meldung bei Fehlern (z.B. JP-ping von nedso.org)

Vielen Dank für Eure Hilfe

Christian

P.S. ich bin Script-technisch ein blutiger Amateur (einfache Linux-Scripte zur Datensicherung auf meinem Privatserver).

Content-ID: 85755

Url: https://administrator.de/contentid/85755

Ausgedruckt am: 05.11.2024 um 16:11 Uhr

54487
54487 17.04.2008 um 13:07:16 Uhr
Goto Top
Hallo,

auch dieses Forum hat eine Suchfunktion, die sogar Ergebnisse liefert:
IP pingen und Erreichbarkeit mitloggen
60730
60730 17.04.2008 um 13:19:31 Uhr
Goto Top
Hi,

angenommen, dein System ist ein deutsches, dann meldet Ping Zeitüberschreitung, ein englisches meldet Request timed out

Das solltest du im folgenden Script anpassen bevor du es als z.B Pingpong.cmd in einem separaten abspeicherst.


ping %1 >ping.txt
findstr /c:"berschreitung" ping.txt  
IF %ERRORLEVEL% == 1 goto end
IF %ERRORLEVEL% == 0 goto offline

:offline
date /t >> pingpong.log
time /t >> pingpong.log
Echo System %1 hat sich nicht gemeldet. >> pingpong.log
notepad pingpong.log
:end

Aufrufen kannst du das, indem du den Scriptnamen und die gewünschte Ip dahinter angibst.
Z.B so:

pingpong.cmd 192.168.1.1
pingpong.cmd 192.168.1.2
LinuxXP
LinuxXP 17.04.2008 um 14:01:07 Uhr
Goto Top
Danke für das nette Script. Habe es pingsrv.cmd genannt und unter C:/Windows abgelegt.

Mein System ist englisch, daher in Zeile 2 natürlich "Request timed out".

Der Notepad Pop-UP funktioniert auch.

Folgende Fragen bleiben für mich noch offen:

a) das Programm soll regelmäßig (z.B. alle 2 Minuten) ausgeführt werden.

b) ich möchte die Server fest vorgeben (mehrere), wie mache ich das?

c) wo wird die pingpong.log (bei mir pingsrv.log) gespeichert?

d) notepad zeigt die gesammte Log-Datei an. Ich möchte nur die Fehlermeldung angezeigt bekommen (nur die aktuelle, für mehr informationen gibt es ja die pingpong.log).

e) kann ich neben der IP-Adresse auch eine eigene Bezeichnung (z.B. Mail Server 01) anzeigen lassen?

Ich habe leider nur Vorstellungen, wie mein Script arbeiten soll. Leider keine Lösung

Falls es hilfreich ist, hier meine "Idee" von dem Script:

1) Das Script wird bei Systemstart automatisch gestartet
2) Das Script prüft regelmäßig die angegebenen Server (z.B in eigener Datei - Zuordnung IP und Bezeichnung siehe e))
3) Das Script gibt die Ergebnisse (Verbingungszeit in ms) in eine Datei aus (bei Fehler automtischer Wert z.B. 5000 ms) idealerweise in eine Tabelle (Spalte 1 (Zeit, Bezeichnung1, Bezeichnung 2...) Spalte 2... (Datum und Uhrzeit des Tests dd.mm.jjjj - hh.mm.ss, Verbindungszeit1, Verbindungszeit2...)) So wäre die Datei einfach mittels Excel auszuwerten (Graphen, Durchschnitt, Verlaufsgraphik, etc.)
4) Tritt ein Fehler auf (Verbindungszeit sehr hoch (z.B. über 1.000 ms) oder time out) soll eine Meldung mit genau diesem Fehler aufpoppen (evt. mehrere Pop-Ups, falls ich nicht am Platz bin.
5) Der Programmablauf soll duch den Pop-UP nicht unterbrochen werden. (Das aktuelle Script (Kommando-Zeile friert ein, bis Notepad geschlossen wird.)

Ist das so machbar?
Sorry, wie gesagt bin ich echter Amateur, was Windows-Scripte angeht.

Danke nochmal für die bisherigen Hilfen und Anregungen (sorry nachdenker, so schnell kann ich das gezeigte script nicht für mich umsetzen).

mfg
Christian
60730
60730 17.04.2008 um 14:30:49 Uhr
Goto Top
Folgende Fragen bleiben für mich noch
offen:

a) das Programm soll regelmäßig (z.B. alle 2 Minuten) ausgeführt werden.

das könntest du per At machen, oder z.B so:

pingeling.cmd
:wait
	set /A Loop=%Loop%+1
	if %Loop% EQU 5000 goto ping
 
goto wait
:ping

pingpong.cmd 192.168.1.1
pingpong.cmd 192.168.1.2

Finde ich persönlich eleganter, denn so vermeidest du, das das Script mehrfach laufen würde (Fall eines Falles)
b) ich möchte die Server fest vorgeben (mehrere), wie mache ich das?
Siehe Aufruf hinter Pingpong.cmd - im Beispiel Pingeling.cmd
c) wo wird die pingpong.log (bei mir pingsrv.log) gespeichert?
Dort - wo Pingpong.cmd liegt, daher der Tipp in einen separaten Ordner legen.
Oder ">> pingpong.log" gegen ">> laufwerk:\pfad\pingpong.log" überall ändern.
d) notepad zeigt die gesammte Log-Datei an. Ich möchte nur die Fehlermeldung angezeigt bekommen (nur die aktuelle, für mehr informationen gibt es ja die pingpong.log).

War ja auch nur ein beispiel - im "ernstfall" würde ich anstelle von Notepad entweder eine Mail an dich verschicken (wenn Mailserver intern - extern ist das ja nix, wenn die externe Leitung weg ist)

e) kann ich neben der IP-Adresse auch eine eigene Bezeichnung (z.B. Mail Server 01) anzeigen lassen?

Yupp, wenn du in der Pingeling.cmd hinter die Ip Adresse noch den Namen (ohne Leerzeichen) schreibst und die zeile in Pingpong so abänderst.
Echo System %1 %2 hat sich nicht gemeldet. >> pingpong.log

Ich habe leider nur Vorstellungen, wie mein Script arbeiten soll. Leider keine Lösung

Falls es hilfreich ist, hier meine
"Idee" von dem Script:

1) Das Script wird bei Systemstart automatisch gestartet

[Start]Systemsteuerung\Geplante Tasks\neuer task Pingpong eintragen - oder per Drag & Drop dorthjin schieben parameter starten bei Systemstart Benutzername und passwort dazu - fertig.

2) Das Script prüft regelmäßig die angegebenen Server (z.B in eigener Datei - Zuordnung IP und
Bezeichnung siehe e))

siehe Pingeling.cmd

3) Das Script gibt die Ergebnisse (Verbingungszeit in ms) in eine Datei aus (bei Fehler automtischer Wert z.B. 5000 ms) idealerweise in eine Tabelle (Spalte 1 (Zeit, Bezeichnung1, Bezeichnung 2...) Spalte 2...
(Datum und Uhrzeit des Tests dd.mm.jjjj - hh.mm.ss, Verbindungszeit1, Verbindungszeit2...)) So wäre die Datei einfach mittels Excel auszuwerten (Graphen, Durchschnitt, Verlaufsgraphik, etc.)

Puh - vielleicht mit dem Logparser realisierbar...

4) Tritt ein Fehler auf (Verbindungszeit sehr hoch (z.B. über 1.000 ms) oder time out) soll eine Meldung mit genau diesem Fehler aufpoppen (evt. mehrere Pop-Ups, falls ich nicht am Platz bin.

Dann nicht nur nach "Timeout" sondern auch nach "000 ms" suchen face-wink Und Notepad evtl. gegen "Net Send %computername% %1 %2 meldet Fehler" ersetzen- Nachrichtendienst dann bitte aktivieren.

5) Der Programmablauf soll duch den Pop-UP nicht unterbrochen werden. (Das aktuelle Script (Kommando-Zeile friert ein, bis Notepad geschlossen wird.)

Ist ja nur ein Demo, zum weiterstricken und sehen, wie es geht.

Ist das so machbar?

Machbar ist prinzipiell alles face-wink

Sorry, wie gesagt bin ich echter Amateur, was Windows-Scripte angeht.
Jeder fängt mal klein an...

Danke nochmal für die bisherigen Hilfen und Anregungen (sorry nachdenker, so schnell kann ich das gezeigte script nicht für mich umsetzen).

mfg
Christian

Bis später
TimoBeil

LinuxXP
LinuxXP 17.04.2008 um 16:09:41 Uhr
Goto Top
Hallo Timo,

danke für die Hilfe.

Anbei meine aktuellen batch-scripte

ping-ip (die Rahmen-Datei)

@echo off

:wait
set /A Loop=%Loop%+1
if %Loop% EQU 5000 goto ping
goto wait

:ping
pingserv.cmd x.x.x.x EAPNMS1-Lotus_Notes
pingserv.cmd x.x.x.x EAPNMS2-Lotus_Notes
pingserv.cmd x.x.x.x Firmen-Router
pingserv.cmd x.x.x.x Provider_Gateway


und die pingserv (die Datei, die die eigentlichen pings ausführt)

ping %1 >ping.txt
findstr /c:"Request timed out" ping.txt
IF %ERRORLEVEL% == 1 goto end
IF %ERRORLEVEL% == 0 goto offline

:offline
date /t >> C:\PING-log\IP-pinging.log
time /t >> C:\PING-log\IP-pinging.log
Echo System %1 %2 hat sich nicht gemeldet. >> C:\PING-log\IP-pinging.log
notepad C:\PING-log\IP-pinging.log
:end

Wenn ich jetzt ping-ip starte, bekomme ich ein Kommandozeilen-Fenster, das leer bleibt.

Ich bekomme noch keine Ausgabe in die Datei (besteht) C:\PING-log\IP-pinging.log.

Nach einem Anruf unseres Providers, möchten die jetzt auch noch eine Trace-Rout (tracert) auf die IP eines fehlgeschlagenen Ping, natürlich als Ausgabe in eine neue Datei (ideal wäre C:\PING-log\Trace-(Datum)-(Uhrzeit)-(IP).log).

Soweit ich es verstehe, benötigen wir jetzt folgende Dateien, die folgendes Ausführen

ping-ip (startet mit Windows, startet die einenzelen pingserv Anfragen)

a) start mit Windows - in Autostart eingefügt (tut)
b) Schleife ausführen (tut)
c) einzelne pingserv Anfragen starten (?)
c) zur Schleife zurückkehren (?)

wenn möglich, diese Datei im Hintergrund ausführen (ohne Fenster oder minimiert)

pingserv (startet den Ping, Ausgabe in Datei)

a) ping auf die IP-Adresse aus ping-ip
b) Ausgabe des Ergebnisses in die Datei C:\PING-log\IP-pinging.log (gerne mit Datum und Uhrzeit)
c) Bedingte Ausführung (wenn-dann-schleife?)
ca) kein Fehler (time out o.ä.) - d)
cb) Fehler ->
cba) Tracroute starten (evt. neues Script)
cbc) Fehlermeldung ausgeben (damit ich aktiv werden kann)
d) pingserv beenden

pingtrace (traceroute auf die IP mit Fehler)

a) Traceroute auf die IP aus pingserv cba)
b) neue Datei anlegen C:\PING-log\trace-(Datum)-(Uhrzeit)-(IP).log
c) Ausgabe der Traceroute in die Log-Datei (erste Zeile: Datum, Uhrzeit, IP-Adresse, evt. Bezeichnung)
d) pingtrace beenden (evt. timeout? oder bricht tracerout automatisch irgendwann ab?)

Ich hoffe, die Scripte nehmen so langsam Formen an.

mfg
Christian
LinuxXP
LinuxXP 17.04.2008 um 16:25:24 Uhr
Goto Top
Habe einen Fehler gefunden!

und die pingserv (die Datei, die die
eigentlichen pings ausführt)

> ping %1 >ping.txt
> findstr /c:"Request timed
out" ping.txt
> IF %ERRORLEVEL% == 1 goto end
> IF %ERRORLEVEL% == 0 goto offline
>
> :offline
> date /t >>
C:\PING-log\IP-pinging.log
> time /t >>
C:\PING-log\IP-pinging.log
> Echo System %1 %2 hat sich nicht
gemeldet. >>
C:\PING-log\IP-pinging.log
> notepad C:\PING-log\IP-pinging.log
> :end

Ich habe die "ping.txt" durch die "C:\PING-log\IP-pinging.log" ersetzt. Jetzt läuft es wie folgt ab:
Die ping-ip startet (schwarzes Fenster), dann wird die erste pingsrv gestartet (und jetzt auch protokolliert). Ich erhalte in der Datei die gleiche Ausgabe, wie in der Konsole auf einen normalen ping. Allerdings wird im Anschluss nicht die zweite IP gepingt, sondern beide Scripte beenden??? (Das ping-ip Fenster schließt sich!).

Statt dessen sollte doch nun die zweite IP gepingt werden (Ausgabe bitte unterhalb/oberhalb des letzten Eintrages).

Wo liegt der Fehler?

mfg
Christian
54487
54487 17.04.2008 um 16:29:30 Uhr
Goto Top
Du musst verschachtelte Batches per call Batchname aufrufen.
LinuxXP
LinuxXP 17.04.2008 um 17:06:18 Uhr
Goto Top
Hallo nachdenker,

habe die Datei ping-ip.cmd angepasst

@echo off

:wait
set /A Loop=%Loop%+1
if %Loop% EQU 5000 goto ping
goto wait

:ping
@echo on
call pingserv.cmd xxx.xxx.xxx.xxx Lotus_Notes
call pingserv.cmd xxx.xxx.xxx.xxx Lotus_Notes
call pingserv.cmd xxx.xxx.xxx.xxx Router
call pingserv.cmd xxx.xxx.xxx.xxx Gateway
call pingserv.cmd xxx.xxx.xxx.xxx Mail
call pingserv.cmd xxx.xxx.xxx.xxx DNS


Allerdings wird jetzt die Datei IP-pinging.log jeweils überschrieben. Wie kann a) dafür sorgen, dass die neuen Einträge unterhalb/oberhalb des alten Eintrages eingetragen werden? b) dafür sorgen dass Datum und Uhrzeit (ggf. Bezeichnung der IP) als Zeile vor den jeweiligen Eintrag kommen?

wenn ich den Bereich ":ping" um die Zeile "goto wait" ergänze, läuft das ganze dann permanent?

mfg
Christian
60730
60730 17.04.2008 um 17:13:55 Uhr
Goto Top
Hi,

schreibe die "batche" bitte zwischen
< code> und < /code> ist leichter zu editieren und zu lesen face-wink Hinter "<" kein Leerzeichen
@echo off
 
:wait
           set /A Loop=%Loop%+1
           if %Loop% EQU 5000 goto ping
           goto wait
 
:ping
cmd /c pingserv.cmd x.x.x.x  EAPNMS1-Lotus_Notes
cmd /c pingserv.cmd x.x.x.x  EAPNMS2-Lotus_Notes
cmd /c pingserv.cmd x.x.x.x Firmen-Router
cmd /c pingserv.cmd x.x.x.x Provider_Gateway

goto wait

und die pingserv (die Datei, die die
eigentlichen pings ausführt)

Rem Datum in Variable Date schreiben
FOR /F "TOKENS=1,2*" %%A IN ('DATE/T') DO SET DATE=%%B  

Rem durch setzen von nur einem ">" die Datei neu schreiben  
ping %1 >ping.txt
findstr /c:"Request timed out" ping.txt  
 IF %ERRORLEVEL% == 1 goto end
 IF %ERRORLEVEL% == 0 goto offline

:offline
Rem anfügen des Hostnamens an den dateinamen der .log
time /t >>  C:\PING-log\IP-pinging%2-%date%.log
Echo System %1 %2 hat sich nicht gemeldet. >> C:\PING-log\IP-pinging%2-%date%.log
Rem notepad C:\PING-log\IP-pinging.log
Rem Notepad wird durch Net Send ersetzt.
cmd /c net send %computername% System %1 %2 hat sich nicht gemeldet - Bitte das ping%1.log ansehen.
cmd /c tracert %1 >ping%1.log

rem "normalerweise würde ich diese "ping%1.log" ja mit einem Befehlszeilenmailer wie BMail.exe verschicken.  
Rem Da Mailserver außerhalb - diese Krücke - aber das ist pre Alpha Status
:end

Nach einem Anruf unseres Providers, möchten die jetzt auch noch eine
Trace-Rout (tracert) auf die IP eines fehlgeschlagenen Ping, natürlich als
Ausgabe in eine neue Datei (ideal wäre C:\PING-log\Trace-(Datum)-(Uhrzeit)-(IP).log).

Soweit ich es verstehe, benötigen wir jetzt folgende Dateien, die folgendes
Ausführen

ping-ip (startet mit Windows, startet
die einenzelen pingserv Anfragen)

a) start mit Windows - in Autostart
eingefügt (tut)
b) Schleife ausführen (tut)
c) einzelne pingserv Anfragen starten (?)
c) zur Schleife zurückkehren (?)

wenn möglich, diese Datei im
Hintergrund ausführen (ohne Fenster oder
minimiert)

Wenn du das Script per At (geplante Tasks) startest, dann siehst du nix.
LinuxXP
LinuxXP 17.04.2008 um 17:33:12 Uhr
Goto Top
Hallo Timo

meine ping-ip.cmd sieht inzwischen so aus
@echo off

:wait
	set /A Loop=%Loop%+1
	if %Loop% EQU 5000 goto ping
	goto wait

:ping
	call pingserv.cmd xxx.xxx.xxx.xxx Lotus_Notes
	call pingserv.cmd xxx.xxx.xxx.xxx Lotus_Notes
	call pingserv.cmd xxx.xxx.xxx.xxx Router
	call pingserv.cmd xxx.xxx.xxx.xxx Gateway
	call pingserv.cmd xxx.xxx.xxx.xxx Mail
	call pingserv.cmd xxx.xxx.xxx.xxx DNS

Das "goto wait" habe ich mir schon fast gedacht, lasse ich aber weg, bis alles andere läuft.
Der "call" kommt übrigens von nachdenker Besten Dank

Die pingserv.cmd hat diesen Stand

ping %1 >>C:\PING-log\IP-pinging.log
date /t >> C:\PING-log\IP-pinging.log
time /t >> C:\PING-log\IP-pinging.log

ping %1 >C:\PING-log\IP-pinging-tmp.log
date /t >> C:\PING-log\IP-pinging-tmp.log
time /t >> C:\PING-log\IP-pinging-tmp.log
findstr /c:"Request timed out" C:\PING-log\IP-pinging-tmp.log  
IF %ERRORLEVEL% == 1 goto end
IF %ERRORLEVEL% == 0 goto offline

:offline
date /t > C:\PING-log\pinging-error.log
time /t >> C:\PING-log\pinging-error.log
Echo System %1 %2 hat sich nicht gemeldet. >> C:\PING-log\pinging-error.log
notepad C:\PING-log\pinging-error.log
:end

Problem war, dass ich für jeden Server den Fehler bekomme, da Fehler natürlich in der Datei protolliert werden. Daher lasse ich den Ping jetzt zweimal laufen. Einmal für das Protokoll, einmal für den Test.

Die Erzeugung der Datei mit Datum werde ich für die Traceroute ausprobieren.

Soweit bin ich mit dem Ergebnis schon zufrieden.

Die Ausgabe der Fehlermeldung via "net send" test ich gleich einmal.

mfg
Christian
LinuxXP
LinuxXP 17.04.2008 um 17:43:57 Uhr
Goto Top
Sorry, "net send" funktioniert nicht (Fehlertext)
An error occurred while sending a message to [Computer-ID].

The message alias could not be found on the network.

Wohin (Progamm) würde die Nachricht denn geschickt? (nutzen Lotus notes)


Punkt 2:
Wie ändere ich den AT unter Windows XP Prof.? Ich habe AT in die Kommandozeile eingegeben und bekomme die Antwort, dass meine Liste leer ist.

Werde vorläufig noch über "notepad" gehen.

Ach ja, die Tracerout wurde sauber erstellt.

einen schönen Feierabend

mfg
Christian
60730
60730 17.04.2008 um 17:44:20 Uhr
Goto Top
Hallo Timo

Problem war, dass ich für jeden Server den Fehler bekomme, da Fehler natürlich
in der Datei protolliert werden. Daher lasse ich den Ping jetzt zweimal laufen. Einmal
für das Protokoll, einmal für den Test.

Uri an Farid Stoppit
Nein im Ernst - schau dir "meine aktuelle variante" lieber genauer an..

Durch das doppelte >> in der ersten Zeile
ping %1 >>C:\PING-log\IP-pinging.log
werden sämtliche Fehler "dummerweise" übertragen. daher das REM und der Verweis nur einen > zu nutzen.

mfg
Christian

Zurück

warte mal ich edit den text grade...

Nimm dir solange die Zeit und lese "Systemsteuerung" Geplante Tasks nochmal in einem früheren Beitrag durch...
AT /? würde dich auch weiterbringen...

edit²

NET Start "Nachrichtendienst" in einer Dosbox eintippen, wenn das einen Fehler bringt, in "ausführen" Services.msc eingeben und dort den Nachrichtendienst auf automatisch und starten ändern.
LinuxXP
LinuxXP 18.04.2008 um 09:34:20 Uhr
Goto Top
Hallo Timo,

die IP-pinging.log soll ja fortlaufend geführt werden (NICHT überschreiben). Darum habe ich ja die *-tmp.log eingeführt (vielleicht nicht die beste Methode, aber funktioniert).

Den Windows Scheduler kenne ich (habe ihn jetzt auch gefunden). Habe IP-pinging auf Systemstart gestellt.

Wenn ich den Befehl
 net send %computername%
mit einem Testtest in der Kommandozeile ausführe bekomme ich folgende Fehlermeldung:
An error occurred while sending a message to [Computername]
The messag alias could not be found on the network.

Habe nochmal die Services.mcs aufgerufen. Der Nachrichtendienst messenger war "disabled" habe ich auf Systemstart gestellt und (diesmal) manuell gestartet.

Test den Befehl "net send" nochmal.

face-smile face-smile TUT!!!

Andere Frage.

Wie kann ich automatisch Ordner für jeden Monat erstellen (für die IP-pinging.log und die trace-*.log)? Oder einfacher: Wie ist der Platzhalter für Monat (Format beliebig)?

mfg
Christian
LinuxXP
LinuxXP 18.04.2008 um 10:16:29 Uhr
Goto Top
Hallo nochmal,

zuerst hier meine aktuelle pingserv.cmd
time /t >> C:\PING-log\IP-pinging.log
echo %2 >> C:\PING-log\IP-pinging.log
ping %1 >>C:\PING-log\IP-pinging.log

date /t > C:\PING-log\IP-pinging-tmp.log
time /t >> C:\PING-log\IP-pinging-tmp.log
ping %1 >>C:\PING-log\IP-pinging-tmp.log
findstr /c:"Request timed out" C:\PING-log\IP-pinging-tmp.log  
IF %ERRORLEVEL% == 1 goto end
IF %ERRORLEVEL% == 0 goto offline

:offline
date /t > C:\PING-log\trace-%2-%date%-%1.log
time /t >> C:\PING-log\trace-%2-%date%-%1.log
echo %2 >> C:\PING-log\trace-%2-%date%-%1.log
ping %1 >>C:\PING-log\trace-%2-%date%-%1.log
tracert %1 >>C:\PING-log\trace-%2-%date%-%1.log
net send PUL40077 Ping auf %2 erfolglos - Bitte das Fehlerprotokoll ansehen.

:end

Leider erscheint die Bezeichnung zur IP %2 in keiner Datei (weder in IP-pinging.log noch der *-tmp.log noch in der trace*-.log) Alle anderen Daten werden korrekt dargestellt. Wo liegt denn diesmal mein Fehler?

Danke für Eure Hilfe (bitte die Monatsfrage nicht vergessen)

mfg
Christian
LinuxXP
LinuxXP 18.04.2008 um 11:17:12 Uhr
Goto Top
Hallo liebe Administratoren und sonstige Foren-User,

das Problem ist größtenteils gelöst.

Aufgabe: Regelmäßige Überwachung bestimmter IP-Adressen (PING) mit Protollierung.
Bei Fehler wird eine Fehler-Log erstellt, die nach Datum, Uhrzeit, IP-Adresse und Bezeichnung einen Ping und eine Tracerout aufzeichnet. Anschließend erscheint eine Fehlermeldung, dass der Server nicht erreichbar ist.

Ausführung: Script eins ping-ip.cmd führt eine Warteschleife aus und führt das eigentliche Script für jeden aufgeführten Server aus.
 @echo off

:wait
	@echo off
	set /A Loop=%Loop%+1
	if %Loop% EQU 5000 goto ping
	goto wait

:ping
	@echo on
	REM x.x.x.x für die IP-Adressen
	call pingserv.cmd x.x.x.x Firmen_Router
	call pingserv.cmd x.x.x.x Provider_Gateway
	call pingserv.cmd x.x.x.x Provider_GK_mail
	call pingserv.cmd x.x.x.x Provider_DNS_1
	call pingserv.cmd x.x.x.x EAPNMS1-Lotus_Notes
	call pingserv.cmd x.x.x.x EAPNMS2-Lotus_Notes
	echo _____Warteschleife_____
	goto wait

Dabei gehe ich von innen (LAN - Gateway - Provider-Server - Ziel-Server) vor.

Ausführung: Script zwei pingserv.cmd führt zwei PINGs aus a) für das Protokoll b) für das tmp-Protokoll. In b) wird auf Fehler geprüft und falls ein Fehler auftritt, wird ein neues Protokoll erstellt, dass Datum, Uhrzeit, IP und Bezeichnung einen PING und eine TRACEROUT aufzeichnet. Anschließend werde ich per SEND auf den Fehler hingewiesen (p.s. Bezeichnung funktioniert - hatte versehentlich nur pingserv.cmd gestartet - da fehlt ja die Info).
 REM Datum in Variable Date schreiben
FOR /F "TOKENS=1,2*" %%A IN ('DATE/T') DO SET DATE=%%B  

echo _____ naechster PING _____ >> C:\PING-log\IP-pinging.log
date /t >> C:\PING-log\IP-pinging.log
time /t >> C:\PING-log\IP-pinging.log
echo %2 >> C:\PING-log\IP-pinging.log
ping %1 >>C:\PING-log\IP-pinging.log

date /t > C:\PING-log\IP-pinging-tmp.log
time /t >> C:\PING-log\IP-pinging-tmp.log
ping %1 >>C:\PING-log\IP-pinging-tmp.log
findstr /c:"Request timed out" C:\PING-log\IP-pinging-tmp.log  
IF %ERRORLEVEL% == 1 goto end
IF %ERRORLEVEL% == 0 goto offline

:offline
date /t > C:\PING-log\trace-%2-%date%-%1.log
time /t >> C:\PING-log\trace-%2-%date%-%1.log
echo %2 >> C:\PING-log\trace-%2-%date%-%1.log
ping %1 >>C:\PING-log\trace-%2-%date%-%1.log
tracert %1 >>C:\PING-log\trace-%2-%date%-%1.log
REM xxx für den Computernamen (manuell eingesetzt, funktionierte nicht automatisch)
net send xxxx Ping auf %2 erfolglos - Bitte das Fehlerprotokoll ansehen.

:end

Gerne würde ich Log-Datein (bis auf die temporäre) in Ordnern nach Monat (monat-jahr) ablegen, das erleichtert die Suche und macht die IP-pinging.log weniger groß.

mfg
Christian
LinuxXP
LinuxXP 18.04.2008 um 14:36:45 Uhr
Goto Top
Hallo liebe Administratoren und Foren-User,

ich habe leider gerade ein neues Problem festgestellt. Nach einem PC Neustart ist das Script im Hintergrund gestartet. Leider liegt die CPU-Auslastung P4 2,8 GHZ 2 GB RAM knapp unter 100 %, wenn das Script aktiv ist (also immer!).

Wenn ich manuell einen pingserv.cmd starte, liegt die Auslastung zwischen 0 und max. 10 %.

Was läuft hier falsch?

Danke für Eure Hilfe

mfg
Christian
LinuxXP
LinuxXP 18.04.2008 um 15:55:59 Uhr
Goto Top
Hallo liebe Administratoren und Foren-User,

ich habe leider gerade ein neues Problem
festgestellt. Nach einem PC Neustart ist das
Script im Hintergrund gestartet. Leider liegt
die CPU-Auslastung P4 2,8 GHZ 2 GB RAM knapp
unter 100 %, wenn das Script aktiv ist
(also immer!).

Wenn ich manuell einen pingserv.cmd
starte, liegt die Auslastung zwischen 0 und
max. 10 %.

Was läuft hier falsch?

Danke für Eure Hilfe

Ich denke, ich habe den Fehler gefunden!

In der ping-ip.cmd wird der Wert für Loop am Anfang nicht auf 0 oder 1 gesetzt. Wie mache ich das?

Der Versuch
REM Loop wieder auf null setzen
set /A Loop=0
ist schon einmal falsch!

mfg
Christian

mfg
Christian
LinuxXP
LinuxXP 18.04.2008 um 16:07:08 Uhr
Goto Top
Habe die Warteschleife geändert.

Siehe Kurze Pause in einer BATCH-Datei

Jetzt ist die CPU-Auslastung im grünen Bereich bis knapp über 10%!

Das Monatsproblem habe ich durch die Einfügung des Datums in die IP-pinging-[Datum].log gelöst. Die trace*.log Dateien haben ja eh schon das Datum im Namen.

Denke jetzt ist dieser Thread gelöst.

Danke für Eure massive und schnelle Hilfe und Eure Nachsicht mit einem GREENHORN

schönes Wochenende

Christian
54487
54487 18.04.2008 um 16:13:22 Uhr
Goto Top
Der ist nicht falsch, sondern möglicherweise an der falschen Stelle eingefügt.

Ob du zur Initialisierung

set loop=0
oder
set /a loop=0

verwendest, ist übrigens egal.

Versuch mal anstelle des Loops die sleep.exe aus dem Resource-Kit.
http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff- ...
LinuxXP
LinuxXP 18.04.2008 um 16:28:22 Uhr
Goto Top
Für alle, die ein ähnliches Problem haben, hier nochmal die beiden Scripte in Ihrer Endfassung:

ping-ip.cmd - wird automatisch mit dem System gestartet
@echo off

REM Datum in Variable Date schreiben
FOR /F "TOKENS=1,2*" %%A IN ('DATE/T') DO SET DATE=%%B  

:waiting
	@echo off
	ping -n 120 x.x.x.x > NUL
	goto pinging

:pinging
	@echo off
	call pingserv.cmd x.x.x.x Firmen_Router
	call pingserv.cmd x.x.x.x Provider_Gateway
	call pingserv.cmd x.x.x.x Provider_GK_mail
	call pingserv.cmd x.x.x.x Provider_DNS_1
	call pingserv.cmd x.x.x.x öffentlich_zugänglicher_Server_am_Zielstandort
	call pingserv.cmd x.x.x.x EAPNMS1-Lotus_Notes
	call pingserv.cmd x.x.x.x EAPNMS2-Lotus_Notes
	@echo on
	echo ' >> C:\PING-log\IP-pinging-%date%.log  
	echo _______________________ >> C:\PING-log\IP-pinging-%date%.log
	echo _____ Warteschleife _____ >> C:\PING-log\IP-pinging-%date%.log
	echo _______________________ >> C:\PING-log\IP-pinging-%date%.log
	@echo off
	goto waiting

Dieses Script enthält waiting eine pause von 2 Minuten - Ping auf die eigene lokale IP mit Zwangspause und null gesendeten Pings und pinging welches das Script pingserv für die jeweiligen Server (von innen nach außen - also Router - Gateway des Providers - zwei hochverfügbare Server des Providers (Geschäftskunden-e-mail und Domain-Name-Service) - öffentlicher Server am Zielstandort - E-Mail-Server (über VPN-tunnel)) anstößt. Die Warteschleife soll das Lesen des IP-pinging-[Datum].log's erleichtern.

pingserv.cmd
@echo off

REM Datum in Variable Date schreiben
FOR /F "TOKENS=1,2*" %%A IN ('DATE/T') DO SET DATE=%%B  

@echo on

echo ' >> C:\PING-log\IP-pinging-%date%.log  
echo _____ naechster PING _____ >> C:\PING-log\IP-pinging-%date%.log
date /t >> C:\PING-log\IP-pinging-%date%.log
time /t >> C:\PING-log\IP-pinging-%date%.log
echo %2 >> C:\PING-log\IP-pinging-%date%.log
ping %1 >>C:\PING-log\IP-pinging-%date%.log

date /t > C:\PING-log\IP-pinging-tmp.log
time /t >> C:\PING-log\IP-pinging-tmp.log
ping %1 >>C:\PING-log\IP-pinging-tmp.log
@echo off
findstr /c:"Request timed out" C:\PING-log\IP-pinging-tmp.log  
IF %ERRORLEVEL% == 1 goto end
IF %ERRORLEVEL% == 0 goto offline

:offline
@echo on
date /t > C:\PING-log\trace-%2-%1-%date%.log
time /t >> C:\PING-log\trace-%2-%1-%date%.log
echo %2 >> C:\PING-log\trace-%2-%1-%date%.log
ping %1 >> C:\PING-log\trace-%2-%1-%date%.log
tracert %1 >> C:\PING-log\trace-%2-%1-%date%.log
net send [Rechnername] Ping auf %2 - IP %1 erfolglos - Bitte das Fehlerprotokoll unter C:\PING-log\ ansehen.

:end

Hier wird zuerst der Trennstich erstellt, darunter kommen Hilfsdaten (Datum, Uhrzeit, IP, Serverbezeichnung), dann wird der Ping in die Log-Datei geschrieben (jeden Tag eine neue Datei). Der zweite Ping wird in die *tmp.log geschrieben, hier wird nach der Fehlermeldung "Request timed out" gesucht. Wird diese gefunden, wird eine neue Log-Datei *trace-[Serverbezeichnung]-[IP-Adresse]-[Datum].log erstellt. In diese Datei werden folgende Daten eingetragen: Datum, Uhrzeit, IP-Adresse, Serverbezeichnung, ein vollständiger Ping und eine Traceroute. Per send erhalte ich eine Meldung, dass ein Fehler auf [Serverbezeichnung] auftrag, und das ich im Verzeichnis "C:\PING-log\" das Protokoll finde.

Soweit mein funktionierendes Script

Danke nochmals an meine beiden Helfer
nachdenker
TimoBeil
LinuxXP
LinuxXP 18.04.2008 um 16:46:30 Uhr
Goto Top
Halle nachdenker,

habe hier im Forum eine bessere Lösung gefunden (die Warteschleife hat meine CPU voll ausgelastet). Aber Danke für den Hinweis.

mfg
Christian

Der ist nicht falsch, sondern
möglicherweise an der falschen Stelle
eingefügt.

Ob du zur Initialisierung

set loop=0
oder
set /a loop=0

verwendest, ist übrigens egal.

Versuch mal anstelle des Loops die
sleep.exe aus dem Resource-Kit.
http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff- ...