Обновление: это произошло два дня подряд.
Обновление: добавлены XML-файлы запланированных задач и изображений.
Два сервера, расположенные в Лондоне, оба под управлением Windows 2012, имеют запланированную задачу, запускаемую с 15:00 с понедельника по пятницу. Это было настроено за последние 5 месяцев без проблем.
Однако в понедельник, 28 августа, они оба выполнили запланированное задание в 15:00, а затем снова в 16:00. Когда об этом впервые сообщили, я подумал, что это слишком большое совпадение, чтобы быть на следующий день после того, как часы отошли на час назад. Однако я не могу объяснить, почему это произошло, и связано ли это с изменением часов.
Соответствующие журналы с одного сервера (журналы для другого также следуют этому шаблону):
Событие 129 15:00:20 Планировщик задач запускает задачу «\ 3pm», экземпляр «C: \ Program Files (x86) \ PHP \ v5.4 \ php.exe» с идентификатором процесса 2388.
Событие 100 15:00:20 Планировщик заданий запустил "{75a3590f-dec1-4dee-bd27-73d63a50a9d7}" экземпляр задачи "\ 3pm" для пользователя "x \ y".
Событие 200 15:00:20 Планировщик заданий запустил действие "C: \ Program Files (x86) \ PHP \ v5.4 \ php.exe" в экземпляре "{75a3590f-dec1-4dee-bd27-73d63a50a9d7}" задачи "\ 3 вечера".
Событие 201 15:00:23 Планировщик заданий успешно завершил задачу «\ 3pm», экземпляр «{75a3590f-dec1-4dee-bd27-73d63a50a9d7}», действие «C: \ Program Files (x86) \ PHP \ v5.4 \ php .exe "с кодом возврата 0.
Событие 129 16:00:20 Планировщик задач запускает задачу «\ 3pm», экземпляр «C: \ Program Files (x86) \ PHP \ v5.4 \ php.exe» с идентификатором процесса 1224.
Событие 100 16:00:20 Планировщик заданий запустил "{3dd46ca9-c525-4796-86b5-5e513fd45f26}" экземпляр задачи "\ 3pm" для пользователя "x \ y".
Событие 200 16:00:20 Планировщик заданий запустил действие "C: \ Program Files (x86) \ PHP \ v5.4 \ php.exe" в экземпляре "{3dd46ca9-c525-4796-86b5-5e513fd45f26}" задачи "\ 3 вечера".
Событие 201 16:00:23 Планировщик заданий успешно выполнил задачу «\ 3pm», экземпляр «{3dd46ca9-c525-4796-86b5-5e513fd45f26}», действие «C: \ Program Files (x86) \ PHP \ v5.4 \ php .exe "с кодом возврата 0.
Я видел этот вопрос Запланированная задача, запускаемая дважды время от времени что указывает на ошибку в http://support.microsoft.com/kb/2461249 быть причиной. Однако это не включает Server 2012 в список проблемных операционных систем.
Я пытаюсь объяснить это, может кто-нибудь еще?
Экспорт XML для запланированной задачи:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2013-04-16T14:04:17.4897806</Date>
<Author>x\y</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2013-04-17T15:00:20</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByWeek>
<DaysOfWeek>
<Monday />
<Tuesday />
<Wednesday />
<Thursday />
<Friday />
</DaysOfWeek>
<WeeksInterval>1</WeeksInterval>
</ScheduleByWeek>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>x\y</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>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\Program Files (x86)\PHP\v5.4\php.exe"</Command>
<Arguments>-f "c:\a.php"</Arguments>
</Exec>
</Actions>
</Task>
29 октября, 17:00 - Обновление. Оба сервера снова запустили запланированную задачу в 15:00 и 16:00. Теперь я обновил файл php, который запускается планировщиком, чтобы на самом деле ничего не делать, пока я пытаюсь решить эту проблему. Я планирую перезапустить один сервер, чтобы посмотреть, изменится ли это что-нибудь завтра.
30 октября, 08:25 - Обновление. При экспорте задачи в XML я вспомнил, что не учел тот факт, что запланированная задача на втором сервере была создана путем импорта XML задачи, созданной на первом. Единственная разница между двумя задачами - это путь к исполняемому php-файлу и учетная запись пользователя, под которой они работают.
30 октября, 16:30 - Обновление - перезапущенный сервер больше не показывает такое поведение, запланированное задание было выполнено на нем один раз. Я подожду несколько дней, прежде чем перезапустить второй сервер, на случай, если у кого-то появятся идеи по диагностике, почему и как это произошло
06 ноября 18:00 - Обновление - Мы применили все обновления ко второму серверу и перезапустили. Мы предполагали, что это решит проблему, однако 15:00 снова запускался дважды - один раз в 15:00 и снова в 16:00. Я смотрел другие запланированные задания, и они выполнялись только один раз.
Мы только что заметили ту же проблему на наших производственных серверах (также Windows Server 2012), которая произошла на этой неделе. Это также началось после того, как наши часы отошли на час назад (это было 3 ноября 2013 года здесь, в Торонто).
Обновление от 12.11.2013:
Кроме того, после дальнейших обсуждений с Microsoft (нашим системным администратором) Microsoft сказала: «... проблема была обнаружена в Windows Server 2012 и исправлена только в следующем выпуске Windows, которым является Windows 8.1 / Windows Server 2012 R2».
У меня возникла эта проблема на этой неделе после перехода на летнее время. Я знаю, что это не лучший ответ, но удаление и воссоздание задания, похоже, решает проблему. Я протестировал пару заданий, которые дублировались за ночь, и воссозданные задания не дублировались.
Мы могли воспроизвести ошибку, когда задание было запланировано на UTC + 0 (сервер Windows 2012 R2).
Например. У нас была работа, которая выполнялась в неправильные даты, она была назначена на 2 часа ночи.
Поскольку наш часовой пояс - UTC + 2, задание выполнялось в UTC + 0.
Похоже, в Windows есть проблемы с округлением. Возможно, он использует внутреннее время в формате UTC, и если задание выполняется точно в время в формате UTC + 0, из-за некоторых ошибок округления или условий гонки задание будет выполняться в неправильные даты.
Мы также видели задания, которые выполнялись по плану, но после перезагрузки сообщали:
Оператор или администратор отклонил запрос (0x800710E0)
После изменения запланированного времени, например, 2:02, ошибки исчезли.