andikad
Goto Top

Warten auf Uhrzeit in Batchdatei

Hallo,

ich habe folgendes Problem:

Eine Batchdatei ruft in jeder Nacht mehrere Programme für Datensicherung, Datenimport und Berichtsversand auf. Bei einem Kunden gibt es das Problem, dass dort immer um 4:00 Uhr der Mailserver rebootet wird, und der Mailversand genau in den Zeitraum fällt, in dem der Server nicht verfügbar ist.
Gibt es eine Möglichkeit in der Batchdatei mit der Ausführung eines Befehls zu warten, bis eine bestimmte Uhrzeit erreicht ist?

Danke!

Gruß, Andreas

Content-ID: 242190

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

Ausgedruckt am: 18.12.2024 um 05:12 Uhr

Xaero1982
Xaero1982 29.06.2014 um 23:08:25 Uhr
Goto Top
Hi,

ehm so richtig sinnig klingt das nicht.

Nicht das ich wüsste.

Wird also durch deine Batch der Mailserver neu gestartet?

Dann kannst du höchstens über den Taskplaner eine Batch ausführen lassen, wenn der Server wieder online ist.

Gruß
andikad
andikad 29.06.2014 um 23:38:04 Uhr
Goto Top
Hi,

warum klingt das nicht sinnig? Aus der Batchdatei wird ein Datenimport aufgerufen, von dem ich nie ganau sagen kann, wann der fertig ist. Wenn ich Pech habe, fällt das Ende genau in den Zeitraum, wo der Mailserver nicht zur Verfügung steht. Im nächsten Schritt wird eine Anwendung aufgerufen, die die Daten des Importlaufs benötigt, daraus Berichte generiert und diese per Mail versendet. Wenn ich einen zweiten Task plane, fehlt mir die Kontrolle, ob der Datenimport schon fertig ist.
Daher die Idee mit dem einen Batchfile und dem Warten, falls der Datenimport vor 4:00 Uhr fertig wird.

Viele Grüße, Andreas
Xaero1982
Xaero1982 30.06.2014 um 01:03:39 Uhr
Goto Top
Weil ich nicht nachvollziehen kann warum man das überhaupt in diese Situation bringt, dass es dort eine Überschneidung mit einem Restart gibt - warum auch immer ein Mailserver offenbar täglich neugestartet wird...

Dann würde ich den Dateiimport ne Stunde eher ansetzen... Mit Batches gibt es jedenfalls keine Möglichkeit bis xx Uhr zu warten.
Xaero1982
Lösung Xaero1982 30.06.2014, aktualisiert am 02.07.2014 um 23:31:40 Uhr
Goto Top
Was du machen kannst: Da ich dein Skript nicht kenne musst du sehen wie und wo du das evtl. einbauen kannst:

@echo off

set hour=3
set minute=55

:loop
for /f "tokens=1,2,3,4 delims=:,. " %%i in ("%time%") do (  
set hr=%%i
set mn=%%j
)

ping 127.0.0.1 -n 5

if %hr% == %hour% (
	if %mn% == %minute% (
	GOTO SchickNix
	) else (
	GOTO loop)
)

:SchickNix
echo Du kommst hier net raus

Ist nur ein Beispiel. Da kannst du dir entsprechend die if-anweisung bearbeiten. Du könntest also prüfen, ob die Stunde <4 ist und die Minute kleiner 15 und erst dann geht die Mail raus.

Ein explizites Warten gibts nicht - daher musst du ein Workaround machen.

Gruß
Snowman25
Snowman25 30.06.2014 um 08:47:01 Uhr
Goto Top
Hallo @andikad,

[...] immer um 4:00 Uhr der Mailserver rebootet wird
Klingt unnötig.
und der Mailversand genau in den Zeitraum fällt, in dem der Server nicht verfügbar ist.
Gibt es eine Möglichkeit in der Batchdatei mit der Ausführung eines Befehls zu warten, bis eine bestimmte Uhrzeit
erreicht ist?
klar, den Task Sheduler.

Gruß, Andreas
Gruß,
Andreas
andikad
andikad 30.06.2014 um 11:33:42 Uhr
Goto Top
Danke für die Antworten!
Ich werde das ausprobieren. Habe auch noch den at Befehl gefunden, mit dem man aus einer Batch einen geplanten Task starten kann.

Wir haben leiden keinen Einfluss darauf ob und wann in dem Laden der Mailserver rebootet wird. Wir sind da nur Kunde face-wink

Viele Grüße, Andreas
Xaero1982
Xaero1982 30.06.2014 um 11:40:53 Uhr
Goto Top
Ihr seid Kunde bei jemandem der regelmäßig den Mailserver herunter fährt? Dann würde ich schon gestern gewechselt haben. Sorry, aber das geht gar nicht.

Also ist das ob und wann auch eher relativ mit 4 Uhr?

Viel Spaß beim Basteln!
andikad
andikad 30.06.2014 um 16:03:12 Uhr
Goto Top
Das mit dem Kunden ist falsch angekommen. Unsere Programme laufen bei unsere Kunden und der fährt den Mailserver runter.

Das mit dem Task Sheduler trifft es auch nicht. Ich könnte zwar das Generieren der Berichte und den Mail versand in einen eigenen Task auslagern, der hätte aber keine Kontrolle darüber, ob der vorher stattfindende Datenimport schon fertig ist. Das ist aber Bedingung.
Xaero1982
Xaero1982 30.06.2014 um 16:51:31 Uhr
Goto Top
Ändert auch nichts an meiner Idee oben...musst du nur in deine Batch basteln... da ich nicht weiß wie die aussieht musst du das selbst machen oder dir irgendeinen anderen Weg suchen face-smile
pieh-ejdsch
Lösung pieh-ejdsch 30.06.2014, aktualisiert am 02.07.2014 um 23:32:00 Uhr
Goto Top
Moin,

Mit robocopy lässt sich auf eine bestimmte Zeit warten und auch eine Zeitspanne als auslass-Zeit überbrücken.
Wenn nichts zu warten ist wird durchgerannt.

@echo off
echo Starte Programm um %time%

 rem Pausiere Programmablauf wenn 04:00 Uhr bis 04:05 Uhr
 rem Mindestens zwei Minuten Überbrücken /RH:Ende-Beginn 
 rem Eine Minute vom Beginn abziehen
setlocal
set Beginn=0359
set   Ende=0405

:: /RH:%Ende%-%Beginn%

set "RC=%temp%\RCtmp.log"  
type nul >"%RC%"  
robocopy . . " Zeitfenster ."  /RH:%Ende%-%Beginn%  /L /W:1 /R:1 /nFL /nDL /njH /njS /tee /Log:"%RC%" |(  
 for /f "tokens=1*" %%a in ('find "..." ^^^<"%RC%" ') do @(  
  echo Zeit fuer eine Pause %time%
  >&3 Zeit fuer eine Pause %time%
  echo Programm wird %%b
  >&3 echo Programm wird %%b
 ) >> D:\Log.txt
)

del "%RC%"  
 rem Weiter mit dem rest



Gruß Phil
andikad
andikad 02.07.2014 um 23:31:01 Uhr
Goto Top
Danke. Das mit RoboCopy ist ein guter Tipp!

Gruß, Andreas