У меня есть запланированная задача, которая настроена на завершение через 23 часа после запуска. Когда я экспортирую задачу в XML, я могу проверить этот параметр, потому что вижу строку:
<ExecutionTimeLimit>PT23H</ExecutionTimeLimit>
Однако на самом деле задача убивается через 20 часов.
Задание начинается в 18:00 каждый день. Глядя на историю задач, я вижу, что TaskScheduler завершил задачу «из-за истечения тайм-аута» в 14:00:01 следующего дня. Конечно, он должен был закончиться в 17:00, если он не закончился раньше этого времени самостоятельно.
Как сделать, чтобы изменение настроек действительно вступило в силу?
Я попытался экспортировать задачу в 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>
Ограничение времени выполнения триггера имеет приоритет над пределом времени выполнения задачи.
<ExecutionTimeLimit>PT20H</ExecutionTimeLimit>
Если указаны оба параметра, ограничение времени выполнения задачи обычно устанавливается на большее (или равное) значение.
TBH, действительно должно быть какое-то видимое предупреждение, предупреждающее вас, если задача настроена таким образом.
У вас 2 ExecutionTimeLimit
1 в триггерах, установленных на ExecutionTimeLimit-PT20H-ExecutionTimeLimit
1 в настройках установлен на ExecutionTimeLimit-PT23H55M-ExecutionTimeLimit
Измените их, чтобы они были такими же, и все должно быть в порядке.