我编写了一个 php 脚本来检查文件夹中是否有任何新文件,如果存在任何新文件,请将它们上传到服务器。这些文件可能非常大。我想经常运行这个脚本 - 比如说每 5 分钟 - 作为计划任务,以便文件尽快移动到服务器。但是,一旦脚本已经尝试上传文件,我不希望它再次运行,因为我担心第二个实例会覆盖已经上传到服务器的文件。
除非脚本已经在运行,否则如何将脚本作为计划任务运行?
我编写了一个 php 脚本来检查文件夹中是否有任何新文件,如果存在任何新文件,请将它们上传到服务器。这些文件可能非常大。我想经常运行这个脚本 - 比如说每 5 分钟 - 作为计划任务,以便文件尽快移动到服务器。但是,一旦脚本已经尝试上传文件,我不希望它再次运行,因为我担心第二个实例会覆盖已经上传到服务器的文件。
除非脚本已经在运行,否则如何将脚本作为计划任务运行?
假设您只是在 XP“计划任务”系统中将任务设置为“重复”,则无需您采取进一步的行动。如果计划任务已经在运行,它不会“重复”任务。
如果您想覆盖该默认值,您可以选中“如果任务仍在运行,此时停止它”框,以使任务调度程序在启动新实例之前终止最后一个实例(尽管听起来您可能不这样做不想那样)。
我这样做的方法是从一个批处理文件运行任务,该文件每天在午夜后不久启动一次,一直运行到下一个午夜。这样做的好处是,因为它是一个脚本,所以您无法运行第二个实例。我想一个缺点可能是您可以准确预测脚本运行的频率,因为它会在每次运行后等待设定的时间。无论如何,如果您有兴趣,我的脚本如下所示:
JR
在 Windows 任务计划程序中有一个复选框(或选项),用于在任务再次启动时如果任务已经在运行时要做什么。您可以将其设置为不启动或并行运行
通常的方法是在任务开始时测试一些全局的东西(通常是一个特定的空文件)。如果存在,则该任务已在运行。如果没有,设置全局的东西,做你的事情,完成任务后取消设置全局的东西。
如果任务失败而没有取消设置全局事物,则会出现问题。您可能希望始终在计算机启动例程中取消设置它,因为如果您重新启动该任务将无法运行。更好的是找到一个在任务结束时自动消失的全局事物。