我有一个计划任务,配置为启动后 23 小时终止。当我将任务导出到 XML 时,我可以验证此设置,因为我看到以下行:
<ExecutionTimeLimit>PT23H</ExecutionTimeLimit>
然而,该任务实际上在 20 小时后被终止。
该任务每天下午 6 点开始。查看任务历史记录,我发现 TaskScheduler 在第二天下午 2:00:01 以“由于超时”为由终止了该任务。当然,如果它在此之前没有自行完成,它应该在下午 5 点终止。
我怎样才能使设置更改真正生效?
我尝试将任务导出到 XML,然后删除它,再从 XML 重新导入。这不起作用,首先,“历史记录”选项卡仍然显示(已删除)任务的所有旧事件;就好像它没有被完全删除一样。
我还禁用了该任务,并用另一个名称从 XML 重新导入了它。该新任务也在 20 小时后失败。将间隔设置为 24 小时(以查看它是否在 21 小时后被终止)不起作用,它仍然会在 20 小时后终止。同样,将超时设置为等效秒数(23 小时)也会在 20 小时后超时。
这是在 Windows Server 2008 R2 Enterprise Service Pack 1 上出现的。这似乎是一个严重的错误。不幸的是,短期内无法升级到 Server 2012。
这是导出到 XML 的任务定义(是的,开头的那些奇怪的字符在原文中确实存在)。在本例中,我将超时设置为 1435 分钟,下面显示为 23 小时 55 分钟。
��<?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2015-08-12T19:02:20.0562727</Date> <Author>MOSCATO2\Administrator</Author> </RegistrationInfo> <Triggers> <CalendarTrigger> <StartBoundary>2015-08-12T18:00:00</StartBoundary> <ExecutionTimeLimit>PT20H</ExecutionTimeLimit> <Enabled>true</Enabled> <ScheduleByWeek> <DaysOfWeek> <Sunday /> <Monday /> <Tuesday /> <Wednesday /> <Thursday /> <Saturday /> </DaysOfWeek> <WeeksInterval>1</WeeksInterval> </ScheduleByWeek> </CalendarTrigger> </Triggers> <Principals> <Principal id="Author"> <UserId>MOSCATO2\biocbuild</UserId> <LogonType>Password</LogonType> <RunLevel>LeastPrivilege</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>PT23H55M</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>E:\biocbld\BBS\3.3\bioc\moscato2\run.bat</Command> <Arguments>>> e:\biocbld\bbs-3.3-bioc\log\MOSCATO2.log 2>&1</Arguments> <WorkingDirectory>E:\biocbld\BBS\3.3\bioc\moscato2</WorkingDirectory> </Exec> </Actions> </Task>
答案1
触发器 ExecutionTimeLimit 的优先级高于任务 ExecutionTimeLimit。
<ExecutionTimeLimit>PT20H</ExecutionTimeLimit>
如果两者都指定,则任务时间限制通常会设置为更高(或相等)的值。
老实说,如果任务以这种方式配置,确实应该有某种可见的警告提醒您。
答案2
您有 2 个 ExecutionTimeLimit
1 在设置为 ExecutionTimeLimit-PT20H-ExecutionTimeLimit 的触发器中
1 在设置中设置为 ExecutionTimeLimit-PT23H55M-ExecutionTimeLimit
把它们改成相同的就好了。