如果同一任务已经在运行,如何阻止计划任务运行?


11

我已经编写了一个php脚本来检查文件夹中是否有任何新文件,如果存在任何新文件,请将它们上传到服务器。这些文件可能很大。我想经常运行此脚本(假设每5分钟运行一次)作为计划任务,以便将文件尽快移至服务器。但是,一旦脚本已经尝试上载文件,我就不想再次运行它,因为恐怕第二个实例将覆盖已经上载到服务器的文件。

除非脚本已在运行,否则如何将其作为计划任务运行?

Answers:


21

假设您只是在XP“计划任务”系统中将任务设置为“重复”,则您不需要采取任何进一步的措施。如果计划任务已在运行,则它不会“重复”该任务。

如果要覆盖该默认值,则可以选中“如果任务仍在运行,请在此时停止它”框,以使任务计划程序在启动新实例之前终止最后一个实例(尽管听起来您可能不这样做)不想那样)。


2

我这样做的方法是从一个批处理文件运行该任务,该文件每天从午夜后一天开始一次,一直运行到下一个午夜。这样做的优点是,因为它是一个脚本,所以您无法运行第二个实例。我想一个缺点可能是您可以准确预测脚本的运行频率,因为它会在每次运行后等待指定的时间。无论如何,如果您有兴趣,我的脚本如下所示:

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


1

在Windows任务计划程序中,有一个复选框(或选项),用于在再次启动任务时如果任务已在运行该怎么办。您可以将其设置为不启动或并行运行


1
XP任务计划程序中的设置在哪里?我没有找到任何方法让XP Scheduler并行执行多次相同的任务。
埃文·安德森

Vista。输入答案后,我注意到了Windows-xp标签。
凯文·库帕尔

0

通常的方法是在任务启动时测试一些全局的东西(通常是特定的空文件)。如果存在,则该任务已经在运行。如果没有,则设置全局任务,执行任务,完成任务后取消全局任务。

如果任务失败而没有取消设置全局对象,则会出现问题。您可能要始终在计算机启动例程中取消设置它,因为如果重新启动该任务将无法运行。更好的方法是找到一个在任务结束时自动消失的全局对象。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.