Wie kann ich die Ausführung einer geplanten Aufgabe verhindern, wenn dieselbe Aufgabe bereits ausgeführt wird?

Wie kann ich die Ausführung einer geplanten Aufgabe verhindern, wenn dieselbe Aufgabe bereits ausgeführt wird?

Ich habe ein PHP-Skript geschrieben, um zu prüfen, ob sich in einem Ordner neue Dateien befinden, und diese, falls vorhanden, auf einen Server hochzuladen. Diese Dateien können ziemlich groß sein. Ich möchte dieses Skript häufig ausführen – sagen wir alle 5 Minuten – als geplante Aufgabe, damit die Dateien so schnell wie möglich auf den Server verschoben werden. Wenn das Skript jedoch bereits versucht, eine Datei hochzuladen, möchte ich es nicht erneut ausführen, da ich befürchte, dass die zweite Instanz die Datei überschreibt, die bereits auf den Server hochgeladen wird.

Wie kann ich das Skript als geplante Aufgabe ausführen, wenn es nicht bereits ausgeführt wird?

Antwort1

Vorausgesetzt, Sie stellen die Aufgabe im XP-System „Geplante Aufgaben“ nur auf „Wiederholen“ ein, ist von Ihrer Seite keine weitere Aktion erforderlich. Geplante Aufgaben „wiederholen“ eine Aufgabe nicht, wenn sie bereits ausgeführt wird.

Wenn Sie diese Vorgabe überschreiben möchten, können Sie das Kontrollkästchen „Wenn die Aufgabe noch ausgeführt wird, jetzt beenden“ aktivieren. Dadurch beendet der Aufgabenplaner die letzte Instanz, bevor eine neue gestartet wird (obwohl es sich anhört, als ob Sie das wahrscheinlich nicht möchten).

Antwort2

Ich habe dies so gemacht, dass ich die Aufgabe aus einer Batchdatei ausführe, die einmal täglich kurz nach Mitternacht startet und bis zur nächsten Mitternacht läuft. Der Vorteil dabei ist, dass Sie, da es sich um ein einzelnes Skript handelt, keine zweite Instanz ausführen können. Ein Nachteil könnte sein, dass Sie genau vorhersagen können, wie oft das Skript ausgeführt wird, da es nach jedem Durchlauf eine festgelegte Zeit warten würde. Falls es Sie interessiert, sieht mein Skript folgendermaßen aus:

rem *** Get the day number. When the day number changes that signals
rem *** the script to exit.

for /f "tokens=1" %%i in ('date /t') do set THEDATE=%%i
set THEDAY=%THEDATE:~0,2%

rem *** Open the log file

echo Starting Whatever >%LOGFILE%
date /t >>%LOGFILE%
echo . >>%LOGFILE%

rem *** Start the monitoring loop

:start

rem *** Run your script

rem Run the script here

rem *** Pause for 300 seconds

sleep 300

rem *** Check the day number. If it is still the same loop back to the
rem *** start of the monitoring loop.

for /f "tokens=1" %%i in ('date /t') do set THEDATE=%%i
if %THEDATE:~0,2% == %THEDAY% goto start

JR

Antwort3

Im Windows-Taskplaner gibt es ein Kontrollkästchen (oder Optionen), was zu tun ist, wenn der Task bereits ausgeführt wird, wenn er erneut gestartet wird. Sie können festlegen, dass er nicht gestartet wird oder parallel ausgeführt wird

Antwort4

Normalerweise wird beim Starten der Aufgabe geprüft, ob ein globales Ding vorhanden ist (häufig eine bestimmte leere Datei). Wenn es vorhanden ist, wird die Aufgabe bereits ausgeführt. Wenn nicht, legen Sie das globale Ding fest, erledigen Sie Ihre Arbeit und heben Sie das globale Ding auf, wenn die Aufgabe abgeschlossen ist.

Dies führt zu Problemen, wenn die Aufgabe fehlschlägt, ohne dass das globale Ding deaktiviert wird. Möglicherweise möchten Sie es immer in der Startroutine des Computers deaktivieren, da die Aufgabe nach einem Neustart nicht ausgeführt werden kann. Besser ist es, ein globales Ding zu finden, das automatisch verschwindet, wenn die Aufgabe beendet ist.

verwandte Informationen