Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ausführung sekundengenau mit For Schleife mgl?

Frage Entwicklung Batch & Shell

Mitglied: Pollekowski

Pollekowski (Level 1) - Jetzt verbinden

22.10.2009, aktualisiert 23.10.2009, 3435 Aufrufe, 7 Kommentare

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.
01.
SET HOST=193.99.144.80        // via UserEingabe 
02.
SET second=%Time:~6,2%        // macht aus 17:59:06,89 -> 06 (nur die Sekunden) 
03.
 
04.
:START 
05.
 
06.
wenn %second% EQU 00 oder 10 oder 20 oder 30 oder 40 oder 50 ist, dann "ping %HOST% -n 1 > %tmp%" 
07.
 
08.
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.
Mitglied: 60730
22.10.2009 um 18:38 Uhr
Servus,

ich hab zwar heute ein weißes Hemderl an - aber ob deshalb die Buchstaben vorm Gott auch für mich gelten?


01.
:start 
02.
Ping -n 9 localhost 
03.
ping -n 1 193.99.144.80 >> %tmp%"  
04.
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
Bitte warten ..
Mitglied: filippg
22.10.2009 um 19:06 Uhr
Hallo,

im Taskplaner (Scheduled Tasks) kann man unter den erweiterten Einstellungen angeben, dass ein Task alle x Sekunden ausgefürt werden soll. Könnte das eine Lösung für dich sein?

Gruß

Filipp
Bitte warten ..
Mitglied: Pollekowski
22.10.2009 um 20:58 Uhr
Leider nicht genau genug, es soll der Ping immer genau auf die Sekunde ausgeführt werden...
Das hat den Sinn, dass das Script in mehrfacher Ausführung parallel läuft und mindestens 12 VPN Verbindungen überwachen soll. Am Ende wird das ganze grafisch als HTML Diagramm dargestellt. Da sollte das alles schon genau und gleichförmig aussehen bei 8640 Pings pro Tag und überwachter Verbindung.

Ping localhost ist zu ungenau, da würd ich lieber auf wait.exe setzen.
Dumm ist aber, dass der Ping je nach Laufzeit unterschiedlich lange brauch um zu antworten. Bzw. Timeouts sind auch unberechenbar. So in der Art habe ich es mit Wait.exe grad umgesetzt, doch hin und wieder überspringt er mal 10 Sekunden

Es soll also immer genau in der 00 / 10 / 20 / 30 / 40 / 50 Sekunde gestartet werden.

Und ich hoffe Biber schaut hier noch vorbei und ich wecke seine Neugier
Bitte warten ..
Mitglied: Pollekowski
22.10.2009 um 21:00 Uhr
Da mehrere Instanzen dieses Scripts parallel laufen werden und die Scripts den ganzen Tag als Schleife laufen ist das keine echte Option. Sry.

Um Euch mal zu verdeutlichen was ich schon hab (aber nicht will), hier mal ein Auszug:
[Zeile 30-38 laufen ja nach Host bis zu 30 mal pro Sekunde durch und fressen sinnlos & massiv CPU Leistung]

01.
@ECHO ON & setlocal EnableDelayedExpansion  
02.
@ECHO. 
03.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
04.
@ECHO :::::::::: Variablen die angepasst werden muessen :::::::::: 
05.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
06.
@ECHO :::: Die Laenge der IP muss mit Punkten gezaehlt werden :::: 
07.
@ECHO ::::::::::: 10.64.0.1 = 9 / 193.231.155.133 = 15 ::::::::::: 
08.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
09.
@ECHO. 
10.
SET HOST=193.99.144.80 
11.
SET IPLAENGE=13 
12.
@ECHO. 
13.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
14.
@ECHO ::::::::::: Variablen die NICHT angepasst werden ::::::::::: 
15.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
16.
@ECHO. 
17.
cls 
18.
SET tmp=%HOST%\%HOST%.tmp 
19.
SET tmp2=%HOST%\%HOST%.tmp2 
20.
SET timestamp=%Date%; %Time:~0,8%; 
21.
SET log=%HOST%-%Date%.log 
22.
SET STARTDATE=%DATE:~0,2% 
23.
SET /A ENDDATE=%STARTDATE%+1  
24.
SET /A EINRUECKUNG=28+%IPLAENGE% 
25.
 
26.
MD %HOST% 
27.
DEL %tmp% 
28.
DEL %tmp2% 
29.
 
30.
:CHKSECOND 
31.
SET second=%Time:~6,2% 
32.
IF %second% EQU 00 GOTO RUNPING 
33.
IF %second% EQU 10 GOTO RUNPING 
34.
IF %second% EQU 20 GOTO RUNPING 
35.
IF %second% EQU 30 GOTO RUNPING 
36.
IF %second% EQU 40 GOTO RUNPING 
37.
IF %second% EQU 50 GOTO RUNPING 
38.
GOTO CHKSECOND 
39.
 
40.
:RUNPING 
41.
SET timestamp=%Time:~0,8%; 
42.
ping %HOST% -n 1 -w 5000 > %tmp% 
43.
 
44.
SET MYERRORLVL=99 
45.
findstr "TTL=" %tmp% 
46.
SET MYERRORLVL=%ERRORLEVEL% 
47.
If %MYERRORLVL% EQU 0 ( 
48.
	findstr "TTL=" %tmp% > %tmp2% 
49.
	GOTO :AUSGABE 
50.
51.
 
52.
Echo Antwort von %HOST%: Bytes=32 Zeit=-100ms TTL=999> %tmp2% 
53.
 
54.
:AUSGABE 
55.
set /p ausgabe=< %tmp2% 
56.
echo %timestamp% %ausgabe:~41,-10% >> %log% 
57.
 
58.
If %STARTDATE% EQU %ENDDATE% GOTO END 
59.
If %second% EQU %Time:~6,2% GOTO WAIT 
60.
 
61.
GOTO CHKSECOND 
62.
 
63.
:WAIT 
64.
WAIT.EXE 9500 
65.
GOTO CHKSECOND 
66.
 
67.
:END 
68.
REM Hier wird das LOG via BLAT.EXE versendet 
69.
REM Hier wird das LOG via FTP auf den Server geladen 
70.
EXIT
In Verbindung mit Wait.exe läuft das zwar aber nicht sauber genug, gerade wenn 20 Instanzen parallel laufen.

Ausgabe ist:

21:33:00; 51
21:33:10; 64
21:33:20; 56
21:33:30; 47
21:33:40; 46
21:33:50; 46
21:34:00; 47
21:34:10; 47
21:34:20; -100
21:34:30; -100
21:34:40; -100
21:34:50; -100
21:35:00; -100
21:35:10; -100
21:35:20; -100
21:35:30; 50
21:35:40; 61
21:35:50; 47
21:36:00; 55

Das wird dann von PHP visualisiert (X = Uhrzeit Y = Latency).

Hoffe jetzt habt Ihr ne gewisse Vorstellung von dem was ich will.
Bitte warten ..
Mitglied: 60730
23.10.2009 um 01:03 Uhr
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...

01.
:start 
02.
@if not "%Time:~7,1%" == "0" @ping -n 2 127.0.0.1>nul 
03.
@if "%Time:~7,3%" == "0,0" @title %Time:~7,3% && ping host>>host.log 
04.
@goto start
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ß
Bitte warten ..
Mitglied: Pollekowski
23.10.2009 um 10:34 Uhr
Es soll halt einfach und universal einsetzbar sein. Zu Diagnosezwecken werden wir beim Kunden mal eine Woche lang die VPN Verbindungen testen und grafisch auswerten. soll ja kein Dauerzustand sein. Und mittels Batch kann ich das Script auf jedem Windows Server / client laufen lassen ohne groß Nagios oder Whatsup zu installieren.

Also sozusagen die Protable NetzMonitoring SW zur Diagnose

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 ganze jetzt wunderbar gekürzt und auch recht performant.

01.
@ECHO OFF & setlocal EnableDelayedExpansion  
02.
@ECHO. 
03.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
04.
@ECHO :::::::::: Variablen die angepasst werden muessen :::::::::: 
05.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
06.
@ECHO. 
07.
SET HOST=193.99.144.80 
08.
@ECHO. 
09.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
10.
@ECHO ::::::::::: Variablen die NICHT angepasst werden ::::::::::: 
11.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
12.
@ECHO. 
13.
cls 
14.
SET tmp=%HOST%\%HOST%.tmp 
15.
SET tmp2=%HOST%\%HOST%.tmp2 
16.
SET timestamp=%Date%; %Time:~0,8%; 
17.
SET log=%HOST%-%Date%.log 
18.
SET STARTDATE=%DATE:~0,2% 
19.
SET /A ENDDATE=%STARTDATE%+1  
20.
SET TMPHOST=%HOST% 
21.
SET IPLAENGE=0 
22.
MD %HOST% 
23.
DEL %tmp% 
24.
DEL %tmp2% 
25.
cls 
26.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
27.
@ECHO ::::::::::: Pingtest auf %HOST% laeuft :::::::::::: 
28.
@ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
29.
@ECHO. 
30.
 
31.
:CHKLENGTH 
32.
if defined TMPHOST (set TMPHOST=%TMPHOST:~1%&set /A IPLAENGE += 1&GOTO CHKLENGTH) 
33.
SET /A EINRUECKUNG=28+%IPLAENGE% 
34.
 
35.
:CHKSECOND 
36.
if %Time:~7,1% EQU 0 GOTO RUNPING 
37.
WAIT.EXE 666 
38.
GOTO CHKSECOND 
39.
 
40.
:RUNPING 
41.
SET timestamp=%Time:~0,8%; 
42.
ping %HOST% -n 1 -w 5000 > %tmp% 
43.
 
44.
findstr "TTL=" %tmp% 
45.
If %ERRORLEVEL% EQU 0 findstr "TTL=" %tmp% > %tmp2% 
46.
If %ERRORLEVEL% EQU 0 GOTO :AUSGABE 
47.
 
48.
Echo Antwort von %HOST%: Bytes=32 Zeit=-100ms TTL=999> %tmp2% 
49.
	 
50.
:AUSGABE 
51.
set /p ausgabe=< %tmp2% 
52.
echo %timestamp% %ausgabe:~41,-10% >> %log% 
53.
If %STARTDATE% EQU %ENDDATE% GOTO END 
54.
WAIT.EXE 5000 
55.
GOTO CHKSECOND 
56.
 
57.
:END 
58.
DEL %tmp% 
59.
DEL %tmp2% 
60.
RD %HOST% /Q /S 
61.
 
62.
REM Hier wird das LOG via BLAT.EXE versendet 
63.
REM Hier wird das LOG via FTP auf den Server geladen 
64.
 
65.
EXIT
Bitte warten ..
Mitglied: 60730
23.10.2009 um 11:46 Uhr
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....

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ß
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

Batch & Shell
gelöst Fehler in Schleife (2)

Frage von miczar zum Thema Batch & Shell ...

Microsoft Office
Internext explorer about:blank auslesen, schleife bis gelanden (1)

Frage von thomas1972 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...