Ausführung sekundengenau mit For Schleife mgl?
Ziel ist ein "Ping -n 1" alle 10 Sekunden auszuführen und das Ergebniss in ein Log zu schreiben
Hallo Ihr Halbgötter des Scriptings!
Ich suche eine Möglichkeit einen Ping Befehl immer genau zu einem bestimmten Zeitpunkt zu starten. Das Script soll den ganzen Tag von 00:00:00 Uhr bis 23:59:59 Uhr laufen und alle 10 Sekunden einen Ping losjagen und das Ergebnis in ein Log schreiben.
Das Script ist im Prinzip schon fertig und funktionstüchtig, allerdings macht mir dabei der Zeitfaktor große Probleme. Teilweise wird der Ping mehrfach in einer Sekunde ausgeführt oder er überspringt mal 10 Sekunden. Abgesehen davon ist das ganze mit einer hässlichen "IF %second% EQU 00 GOTO RUNPING" Schleife gemacht, die solange durchläuft bis einmal ein Treffer gelandet wird und der Ping ausgeführt. Das verursacht enorme CPU Last.
Lange Rede kurzer Sinn. Mein Logfile soll am Ende etwa so aussehen: (Wobei -100 einem Timeout gleich kommt)
Uhrzeit; Latency
16:59:10; 13
16:59:20; 14
16:59:30; 14
16:59:40; 13
16:59:50; 17
17:00:00; -100
Jetzt suche ich halt eine Möglichkeit den Folgenden Pseudocode in eine reine und saubere Batchform zu pressen.
Ich hoffe ihr versteht was ich will und noch mehr hoffe ich, dass auch jemand ne tolle Idee hat wie ich das ganze umsetzen kann.
Hallo Ihr Halbgötter des Scriptings!
Ich suche eine Möglichkeit einen Ping Befehl immer genau zu einem bestimmten Zeitpunkt zu starten. Das Script soll den ganzen Tag von 00:00:00 Uhr bis 23:59:59 Uhr laufen und alle 10 Sekunden einen Ping losjagen und das Ergebnis in ein Log schreiben.
Das Script ist im Prinzip schon fertig und funktionstüchtig, allerdings macht mir dabei der Zeitfaktor große Probleme. Teilweise wird der Ping mehrfach in einer Sekunde ausgeführt oder er überspringt mal 10 Sekunden. Abgesehen davon ist das ganze mit einer hässlichen "IF %second% EQU 00 GOTO RUNPING" Schleife gemacht, die solange durchläuft bis einmal ein Treffer gelandet wird und der Ping ausgeführt. Das verursacht enorme CPU Last.
Lange Rede kurzer Sinn. Mein Logfile soll am Ende etwa so aussehen: (Wobei -100 einem Timeout gleich kommt)
Uhrzeit; Latency
16:59:10; 13
16:59:20; 14
16:59:30; 14
16:59:40; 13
16:59:50; 17
17:00:00; -100
Jetzt suche ich halt eine Möglichkeit den Folgenden Pseudocode in eine reine und saubere Batchform zu pressen.
SET HOST=193.99.144.80 // via UserEingabe
SET second=%Time:~6,2% // macht aus 17:59:06,89 -> 06 (nur die Sekunden)
:START
wenn %second% EQU 00 oder 10 oder 20 oder 30 oder 40 oder 50 ist, dann "ping %HOST% -n 1 > %tmp%"
GOTO START
Ich hoffe ihr versteht was ich will und noch mehr hoffe ich, dass auch jemand ne tolle Idee hat wie ich das ganze umsetzen kann.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 127737
Url: https://administrator.de/contentid/127737
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
7 Kommentare
Neuester Kommentar
Servus,
ich hab zwar heute ein weißes Hemderl an - aber ob deshalb die Buchstaben vorm Gott auch für mich gelten?
für die Skizze bestimmt nicht
Gruß
edit:
Biber unser Vollgott nicht nur für einzeiler hätte an deinem Beispiel mit dem Logfile - seine größte Freude
ich hab zwar heute ein weißes Hemderl an - aber ob deshalb die Buchstaben vorm Gott auch für mich gelten?
:start
Ping -n 9 localhost
ping -n 1 193.99.144.80 >> %tmp%"
goto start
für die Skizze bestimmt nicht
Gruß
edit:
Biber unser Vollgott nicht nur für einzeiler hätte an deinem Beispiel mit dem Logfile - seine größte Freude
Servus,
Warum du dir "soviel" Mühe machst (und dann mit den Mitteln) hab ich zwar immer noch nicht verstanden...
Aber anstatt mühsam mit %Time:~6,2% set & 10,20,usw rumzuhantieren...
kostet der Weg kaum Saft...
btw: Du weißt aber schon, welche Datenmenge mit 5.000er Testpaketen alle 10 sekunden zusätzlich auf die Leitung kommen...
Ich würde - wenn überhaupt mit "den" Mitteln - immer via Telnet von einem Switch zum anderen "pingen" - wenn überhaupt....
Gruß
Warum du dir "soviel" Mühe machst (und dann mit den Mitteln) hab ich zwar immer noch nicht verstanden...
Aber anstatt mühsam mit %Time:~6,2% set & 10,20,usw rumzuhantieren...
:start
@if not "%Time:~7,1%" == "0" @ping -n 2 127.0.0.1>nul
@if "%Time:~7,3%" == "0,0" @title %Time:~7,3% && ping host>>host.log
@goto start
btw: Du weißt aber schon, welche Datenmenge mit 5.000er Testpaketen alle 10 sekunden zusätzlich auf die Leitung kommen...
Ich würde - wenn überhaupt mit "den" Mitteln - immer via Telnet von einem Switch zum anderen "pingen" - wenn überhaupt....
Gruß
Zitat von @Pollekowski:
/snip
Deine Idee mit dem "IF Time xx == 0" hat mich erstmal dazu
veranlasst dreimal mit dem Kopf auf den Schreibtisch zu schlagen .
Das ich da nicht drauf gekommen bin....
/snip
Deine Idee mit dem "IF Time xx == 0" hat mich erstmal dazu
veranlasst dreimal mit dem Kopf auf den Schreibtisch zu schlagen .
Das ich da nicht drauf gekommen bin....
Das du da noch drauf gekommen bist - nachdem dein Kopf dreimal gegen den Tisch gekommen ist..
der arme Tisch hats hoffentlich überlebt
Das ganze jetzt wunderbar gekürzt und auch recht performant.
Und als Gegenlob mal klipp und klar:
- freut mich - dir geholfen zu haben und dass du einen wirklich Aussagekräftigen Titel für dein Problem gewählt hast.
"So" sollten die Threads alle sein - kurz, prägnant, nix dabei vergessen und so formuliert, dass später auch ein anderer was davon hat
umademyday
Gruß