Windows

如果同一個任務已經在執行,如何防止計劃任務執行?

  • May 27, 2014

我編寫了一個 php 腳本來檢查文件夾中是否有任何新文件,如果存在任何新文件,請將它們上傳到伺服器。這些文件可能非常大。我想經常執行這個腳本 - 比如說每 5 分鐘 - 作為計劃任務,以便文件盡快移動到伺服器。但是,一旦腳本已經嘗試上傳文件,我不希望它再次執行,因為我擔心第二個實例會覆蓋已經上傳到伺服器的文件。

除非腳本已經在執行,否則如何將腳本作為計劃任務執行?

假設您只是在 XP“計劃任務”系統中將任務設置為“重複”,則無需您採取進一步的行動。如果計劃任務已經在執行,它不會“重複”任務。

如果您想覆蓋該預設值,您可以選中“如果任務仍在執行,此時停止它”框,以使任務調度程序在啟動新實例之前終止最後一個實例(儘管聽起來您可能沒有不想那樣)。

我這樣做的方法是從一個批處理文件執行任務,該文件每天在午夜後不久啟動一次,一直執行到下一個午夜。這樣做的好處是,因為它是一個腳本,所以您無法執行第二個實例。我想一個缺點可能是您可以準確預測腳本執行的頻率,因為它會在每次執行後等待設定的時間。無論如何,如果您有興趣,我的腳本如下所示:

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

引用自:https://serverfault.com/questions/40504