Планировщик задач выполнил задачу дважды
Обновление: теперь это происходит два дня подряд.
Обновление: 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 - Обновление - Мы применили все обновления ко второму серверу и перезапустили. Мы предполагали, что это решит проблему, однако 3 часа дня снова запускались дважды - один раз в 15:00 и снова в 16:00. Я посмотрел на другие запланированные работы, и они побежали только один раз.
6 ответов
Мы только что заметили ту же проблему на наших производственных серверах (также Windows Server 2012), которая произошла на этой неделе. Это также началось после того, как наши часы вернулись на один час (это было 3 ноября 2013 года, здесь, в Торонто).
Обновление от 12 ноября 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, ошибки исчезли.
У меня эта проблема возникла на этой неделе после перехода на летнее время. Я знаю, что это не очень хороший ответ, но удаление и воссоздание работы, похоже, решает проблему. Я протестировал пару заданий, которые дублировались в течение ночи, и воссозданные задания не дублировались.
У меня была эта проблема на сервере Windows Server 2016, и это не была импортированная задача, как упоминалось другими. Это была новая базовая задача, созданная во время перехода на летнее время, и не возникала проблем до тех пор, пока 3 ноября этого года не переключилось обратно, после чего она начала выполняться дважды, ровно в час с интервалом от запланированного времени.
Более того, ни у одной из моих других задач нет этой проблемы. Единственное отличие этой задачи (которое я могу придумать) от других состоит в том, что она использует ежемесячный триггер с парой дней, указанных в течение месяца.
Мне пришлось просто установить флажок рядом с параметром запуска по времени начала для "Синхронизировать по часовым поясам".
Забавно, я только что столкнулся с этим на новом сервере Windows (версия 2019 на официальном изображении aws). Без видимой причины он запускает мой сценарий PowerShell дважды, мне удалось найти небольшой обходной путь, добавив в мой сценарий Test-Path,
Сценарий будет запущен, и если $FILE не существует, он продолжит и создаст его, если он существует, он завершит работу (следовательно, двойное выполнение, тот, кто запустится первым, уйдет, он не разрешит выполнение параллелей на время его работы) в в конце выполнения файл будет удален. Надеюсь, этот обходной путь кому-то помог! Прикрепляю образец. РЕДАКТИРОВАТЬ — добавлен случайный сон перед проверкой существования файла.
Пауэршелл
$num = Get-Random -Maximum 100
start-sleep $num
$file = './running.info'
if (Test-Path -Path $file) {
echo "File Exists, Quitting"
return
} else {
echo "File Does not exists, Resuming"
echo hey > ./running.info
Start-sleep 12
Remove-Item ./running.info
}
У меня была такая же проблема на Windows Server 2016.
Просто немного истории. Задача работала нормально в течение нескольких лет на Windows Server 2008 R2. В мае 2020 года мы перенесли задачу (импорт XML) на Windows server 2016.
В моем случае задача запускается 1-го числа каждого месяца в 10 CET. Проблема началась после перехода на зимнее время 25 октября в 3 часа ночи 2020 года. Первая задача была запущена в 10 CET, а затем снова в 11 CET 1 ноября 2020 года. Снова те же самые 10 CET и 11 CET в декабре 2020 года.
Помогло только ручное воссоздание задачи с нуля (без импорта XML).