lamerking
Goto Top

Tasks überschneiden sich

Hallo zusammen,

ich habe folgendes Problem.
Ich habe unter Windows 2000 Server einen Task aufgesetzt, der automatisch eine Batch-Datei anstartet. Die Batch startet (vereinfacht gesagt) ein Programm, dass Aenderungen durchfuehrt.

Dieser Task soll in einem bestimmten Zeitabstand laufen. Die Aenderungen des Tasks bzw. der Batch dauern aber manchmal ziemlich lang oder ziemlich kurz. Das Problem an der Sache ist, dass der Task erneut gestartet wird, obwohl bereits eine Aenderung laeuft. Es laufen also auf einmal 2 Aenderung. Gibt es eine Moeglichkeit dem Task bzw. der Batch-Datei Parameter mitzugeben, damit der darauffolgnde Task wartet, bis die Aenderungsanwendung geschlossen ist?

Ich hoffe ich habe mich verstaendlich ausgedrueckt ;)

Danke schon mal.

Gruss
Tobias

Content-Key: 23832

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

Printed on: April 25, 2024 at 16:04 o'clock

Mitglied: 13100
13100 Jan 17, 2006 at 20:33:01 (UTC)
Goto Top
1) überprüfe die existenz oder den inhalt der datei, die du unter punkt 3 anlegst.
2) wenn sie eine 1 beinhaltet oder existiert, dann brich ab, ansonsten setze fort.
3) schreibe eine 1 in eine datei (z.b. c:\status.txt).
4-499) exzessive batchnutzung nach deinem belieben
500) am ende des tasks/batch schreibst du eine 0 in die datei oder löscht
sie einfach wieder.


mit anderen worten, lässt du einfach einen oder auch mehrere taskzyklus
ausfallen, wenn der vorige noch nich abgeschlossen is, zu erkennen an der datei.
Member: Lamerking
Lamerking Jan 18, 2006 at 17:06:18 (UTC)
Goto Top
Hi,

erstmal danke für deine Tipps.
Allerdings kann ich irgendwie nix damit anfangen ;)

1.) überprüfe die existenz oder den inhalt der datei, die du unter punkt 3 anlegst.

punkt3? was meinst du mit inhalt der datei?

2) wenn sie eine 1 beinhaltet oder existiert, dann brich ab, ansonsten setze fort.
Eine 1 beeinhaltet, hmmmmm???

Könntest du es evtl. mir etwas verständlicher erklären?

Danke schon mal.

Gruß Tobias
Mitglied: 13100
13100 Jan 18, 2006 at 17:22:20 (UTC)
Goto Top
ok, vergiss die eins, leg einfach eine datei an.
solange diese vorhanden is, weisst du, es rennt noch was.
also überprüfst du ganz am anfang, in deinem batch/task,
ob die datei da is, wenn dem so is muss dein script
abbrechen, andernfalls darf es bis zum ende ausgeführt
werden.

ich versuchs gleich nochmal, ganz knapp:

1) überprüfen ob datei existiert (ja = abbruch)
2) datei erstellen (echo > c:\woswas.txt)
3) die eigentliche arbeit erledigen
4) am ende die erstellte datei löschen (del woswasi.txt)

für "if exist" hab ich jetz gerad nich die syntax im kopf,
lässt sich aber sicher finden.
Member: Biber
Biber Jan 18, 2006 at 18:04:26 (UTC)
Goto Top
Moin Lamerking,

ich kann zu Angels Lösung nur Handwerkliches hinzufügen.

::----snipp SimpleSemaphoreBsp.bat
@echo off & setlocal
Set "FlagFile=%temp%\FlagFile.txt"
Set "optionalerText=Nicht vergessen: Jaffa Cake und 3 Kefir von ALDI mitbringen."
if exist %FlagFile% goto :eof
echo %optionalerText%>%FlagFile%
Start /w D:\Eine\ProggiDatei.exe
del %Flagfile% >nul
::---snapp SimpleSemaphoreBsp.bat


Alternativ zu dieser Mimik könntest Du auch in der "Prozessliste" (das, was Du auch über den Taskmanager anschauen kannst) überprüfen, ob Dein eigentliches Programm aktiv ist. Wäre eine Spur zuverlässiger.
Angels Lösung hat ihren Schwachpunkt an der Stelle, an der Dein Proggi.exe einmal abstürzt. Dann wird u. U. auch der Batch nie fertig und die Flag-Datei nie wieder gelöscht.
Bis Du sie mal von Hand weglöscht.

Die Alternative hat allerdings ihre Schwachstelle an genau dem gleichen Punkt. Wenn Dein Proggi.exe "ohne Rückmeldung" tot überm Zaun und in der Prozessliste hängt, wird bis zur manuellen Entfernung nie ein zweiter gleichnamiger Prozess starten.

Also nimm die erste simple Variante.
Grüße Biber
<div align="center" style="width:100%; vertical-align:middle; background:silver; height:20px; border-style:solid; border-width:thin; border-color:#000000" dir="ltr" lang="de"><font size="1">Alles mit weniger als 50 Zeilen ist grundsätzlich ungetestet. Vor dem Starten System sichern.</font></div>
Member: Lamerking
Lamerking Jan 18, 2006 at 18:35:36 (UTC)
Goto Top
Hi, wow super für deine Ausführungen!!!

Ich hätte es so realisiert:

if exist flagfile goto :eof
echo flagfile > flagfile
Aufgaben durchführen
del flagfile

Ich kann aber auch nicht scripten ;)
Die andere Variante würde mich aber schon mehr interessieren.
Könntest du die genauer erläutern?

Dank dir schon mal.

Gruß
Tobias
Mitglied: 13100
13100 Jan 18, 2006 at 18:36:10 (UTC)
Goto Top
Jaffa Cake und 3 Kefir - ich weiss nich was das is, aber es klingt wie biberfutter face-smile

legen wir noch einen scheit drauf:

&bull;) ins file wird das datum/zeit geschrieben.
&bull;) nach überprüfung der datei, überprüfst du das
datum mit dem aktuellen. wenn die differenz grösser als
x is, dann löscht du die datei und brichst ab.
&bull;) der nächste zyklus rennt dann wieder auf jedenfall.

x wird so definiert dass es eigentlich die längstezeit erledigt
sein sollte. kommt natürlich auch darauf an wie heikel und
zeitnah alles läuft/laufen muss.

in c++ bist du in dem fall wohl schnelle und besser beraten.
hier kannst du auch richtiges taskmanagement veranstallten.
man könnte auch von jeden, von deinem batch ausgeführten
programmteil einen rückgabewerte in die woswasi.txt schreiben,
aber jetz fang ich an zum übertreiben und höre deshalb auf,
bevor ich freidreh.
Member: Biber
Biber Jan 18, 2006 at 19:27:00 (UTC)
Goto Top
@7203
...Biberfutter...
Ich drücke das gegenüber meiner Familie immer als "vegetarische und vitaminreiche Ernährung" aus.
Also nur Kekse mit Orangenfüllung und Kefir und Kaffee und Zigaretten. face-wink

@Lamerking

Dass ich sinngemäß geschrieben habe, "die kompliziertere Lösung über Prozessliste hat den gleichen Schwachpunkt" hattest Du aber mitgelesen, oder?

Unter XP wird schon ein Utility namens Tasklist.exe dabei; für alle Windowsversionen gibt es aber auch ähnliche Freeware-Utilities (pslist.exe, ps.exe,...etc.)

Du könnest also deren Output ( eine mehr oder weniger lange Liste von laufenden Prozessen) nach dem Namen Deines Proggi.exe durchsuchen.
:: Beispiel im Batch:
(TaskList | find /i "Proggi.exe" >nul) && goto :eof
...MachAufgaben...

Sprich: wenn "Proggi.exe" schon läuft, dann ("&&") Batch sofort beenden.
Mit Tasklist.exe könntest du theoretisch auch prüfen/filtern, ob die Proggi.exe ein "laufender" oder ein Prozess "ohne Rückmeldung" ist.

Aber da wir ja hier von M$-Windows reden, kann eben ein Prozess ohne Rückmeldung sehr wohl noch laufen (hat nur grad keine Kapazität frei zum Rückmelden) und ein "running prozess" in der Liste kann ebenso schon klinisch tot sein...
Mehr Sicherheit/Aussagekraft bekämst Du wirklich nur mit "echten" Programmiersprachen. Aber das ist ja für diesen Zweck etwas überdimensioniert.
Oder steuerst Du Satelliten mit diesem Batch oder ist das eine Kliniks-Narkose-Dosierung oder ähnliches?

Grüße Biber