O agendador de tarefas executou uma tarefa duas vezes

10

Atualização: isso já aconteceu dois dias seguidos.

Atualização: XML de tarefas agendadas e imagens agora incluídas.

Dois servidores localizados em Londres, ambos com Windows 2012, têm uma tarefa agendada definida para ser executada às 15h de segunda a sexta-feira. Isso foi configurado nos últimos 5 meses sem nenhum problema.

No entanto, na segunda-feira 28 de agosto, ambos executaram a tarefa agendada às 15h e depois novamente às 16h. Quando foi relatado pela primeira vez, achei que era coincidência demais o dia seguinte ao relógio voltar uma hora. No entanto, não estou conseguindo explicar por que isso aconteceu e se está relacionado à mudança do relógio.

Os logs relevantes de um servidor (os logs para o outro seguem também esse padrão):

Evento 129 15:00:20 Tarefa de lançamento do Agendador de Tarefas "\ 15:00", instância "C: \ Arquivos de Programas (x86) \ PHP \ v5.4 \ php.exe" com o ID do processo 2388.

Evento 100 15:00:20 O Agendador de Tarefas foi iniciado "{75a3590f-dec1-4dee-bd27-73d63a50a9d7}" instância da tarefa "\ 15:00" para o usuário "x \ y".

Evento 200 15:00:20 O Agendador de tarefas iniciou a ação "C: \ Arquivos de Programas (x86) \ PHP \ v5.4 \ php.exe" na instância "{75a3590f-dec1-4dee-bd27-73d63a50a9d7}" da tarefa "\ 15:00".

Evento 201 15:00:23 O Agendador de tarefas concluiu com êxito a tarefa "\ 15:00", instância "{75a3590f-dec1-4dee-bd27-73d63a50a9d7}", ação "C: \ Arquivos de Programas (x86) \ PHP \ v5.4 \ php .exe "com código de retorno 0.

Evento 129 16:00:20 Tarefa de lançamento do Agendador de Tarefas "\ 15:00", instância "C: \ Arquivos de Programas (x86) \ PHP \ v5.4 \ php.exe" com o ID do processo 1224.

Evento 100 16:00:20 O Agendador de Tarefas foi iniciado "{3dd46ca9-c525-4796-86b5-5e513fd45f26}" instância da tarefa "\ 15:00" para o usuário "x \ y".

Evento 200 16:00:20 O Agendador de Tarefas iniciou a ação "C: \ Arquivos de Programas (x86) \ PHP \ v5.4 \ php.exe" na instância "{3dd46ca9-c525-4796-86b5-5e513fd45f26}" da tarefa "\ 15:00".

Evento 201 16:00:23 O Agendador de tarefas concluiu com êxito a tarefa "\ 15:00", instância "{3dd46ca9-c525-4796-86b5-5e513fd45f26}", ação "C: \ Arquivos de programas (x86) \ PHP \ v5.4 \ php .exe "com código de retorno 0.

Eu já vi essa pergunta Tarefa agendada executando duas vezes de tempos em tempos, o que aponta para um erro em http://support.microsoft.com/kb/2461249, sendo a causa. No entanto, isso não inclui o Server 2012 em sua lista de sistemas operacionais com problemas.

Estou lutando para explicar isso, mais alguém pode?

A exportação XML para a tarefa agendada é:

<?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>

Configuração do acionador para a tarefa agendada Histórico para a tarefa agendada

29 de outubro 17:00 - Atualização - Ambos os servidores executaram novamente a tarefa agendada às 15:00 e 16:00. Agora eu atualizei o arquivo php que é executado pelo agendador para não fazer nada enquanto estou tentando resolver isso. Estou planejando reiniciar um servidor para ver se isso muda alguma coisa amanhã.

30 de outubro, 08:25 - Atualização - Ao exportar o XML da tarefa, lembrei-me de que não havia incluído o fato de que a tarefa agendada no segundo servidor foi criada importando o XML da tarefa criada no primeiro. A única diferença entre as duas tarefas é o caminho do arquivo php que eles estão executando e a conta de usuário em que estão executando.

30 de outubro às 16:30 - Atualização - O servidor que foi reiniciado não está mais mostrando esse comportamento; a tarefa agendada foi executada uma vez. Vou esperar alguns dias antes de reiniciar o segundo servidor, caso alguém tenha alguma idéia sobre como diagnosticar por que / como aconteceu

06 de novembro 18:00 - Atualização - Aplicamos todas as atualizações no segundo servidor e reiniciamos. Assumimos que isso resolveria o problema; no entanto, as 15h rodavam duas vezes novamente - uma vez às 15h e novamente às 16h. Eu olhei para outros trabalhos programados e eles foram executados apenas uma vez.

Ross Buggins
fonte
É improvável devido à mudança de horário, se for no dia seguinte, e os horários nos logs refletem o horário exato (ou seja, se fosse um problema de horário, você o veria rodar duas vezes, mas às 15:00 e não um de cada vez). Honestamente, se acontecesse apenas uma vez em agosto, eu estaria inclinado a dizer "bug / anomalia / fantasmas" e seguir em frente. Mas talvez alguém possa lançar alguma luz para você aqui ...
TheCleaner
29 de outubro 17:00 - Atualização - Ambos os servidores executaram novamente a tarefa agendada às 15:00 e 16:00. Atualizei agora o arquivo php que é executado pelo agendador para não fazer nada enquanto estou tentando resolver isso. Estou planejando reiniciar um servidor para ver se isso muda alguma coisa amanhã.
Ross Buggins
1
Você poderia nos fazer um favor e postar a exportação XML da tarefa agendada para que possamos ver quais são seus parâmetros?
Ryan Ries
só para ter certeza: você marcou a opção Trigger "Sincronizar entre fusos horários"? Depois disso, o Agendador de tarefas está usando o UTC.
Manfred Schmidt
Não, isso não está marcado. No entanto, com isso marcado, não acho que seja o comportamento que exijo. Quero que a tarefa seja executada às 15:00, horário local. Com isso, acredito que levaria uma hora para sair durante o BST?
Ross Buggins

Respostas:

4

Acabamos de notar o mesmo problema em nossos servidores de produção (também Windows Server 2012), que ocorreu nesta semana. Também começou depois que nossos relógios voltaram uma hora (que era 3 de novembro de 2013, aqui em Toronto).

Atualização em 12 de novembro de 2013:

  • A reinicialização não funcionou (as tarefas continuaram sendo executadas duas vezes)
  • A exportação e reimportação das tarefas não funcionaram (as tarefas continuaram sendo executadas duas vezes)
  • Recriar manualmente a tarefa na GUI corrige o problema

Além disso, após discussões adicionais com a Microsoft (pelo administrador do sistema), a Microsoft disse: "... o problema foi identificado no Windows Server 2012 e foi corrigido apenas na próxima versão do Windows, que é o Windows 8.1 / Windows Server 2012 R2" .

Warren Stevens
fonte
Também foram importados por arquivos XML? Ver o meu comentário à resposta Stijn
Ross Buggins
Temos cerca de 10 tarefas. Aqueles que foram digitados manualmente (tenho certeza dessa origem, porque criei recentemente as tarefas) NÃO têm o problema de executar duas vezes. Algumas das outras tarefas foram importadas do XML e têm o problema. Nós estamos indo para tentar uma reinicialização amanhã, e estão seguindo com a Microsoft
Warren Stevens
Mais uma nota: Nós não temos "Sincronizar através de fusos horários" verificados em qualquer uma das tarefas (no caso o que importa)
Warren Stevens
De nosso administrador de sistemas: "... Tiveram uma sessão com a Microsoft, eles já viram isso antes, mas não sabem dizer exatamente o que o causa. Por enquanto, eles pedem que tentemos reiniciar o servidor e também recrie as tarefas. Não há hotfix instalável para resolver isso como eles têm dito outros clientes afetados foram capazes de resolver por qualquer reiniciar ou recriar as tarefas ..."
Warren Stevens
1
Estamos executando o Windows 2016 e estão tendo o mesmo problema (trabalho importado a partir do Windows 2012)
Greg
1

Eu tive esse problema surgido esta semana desde a mudança do horário de verão. Sei que essa não é uma ótima resposta, mas excluir e recriar o trabalho parece resolver o problema. Eu testei em alguns trabalhos que foram duplicados durante a noite e os trabalhos recriados não foram duplicados.

David Broaddus
fonte
0

Podemos reproduzir o erro quando o trabalho foi agendado para UTC + 0 (servidor Windows 2012 R2).
Por exemplo, tivemos um trabalho sendo executado em datas erradas, agendadas às 2 da manhã.
Como nosso fuso horário é UTC + 2, o trabalho foi executado no UTC + 0.
Parece que o Windows tem alguns problemas de arredondamento. Talvez ele use o UTC internamente e se o trabalho for executado exatamente no UTC + 0, alguns erros de arredondamento ou condições de corrida farão com que o trabalho seja executado nas datas erradas.
Também vimos trabalhos, que são executados conforme o planejado, mas após a reinicialização, relatamos:

O operador ou administrador recusou a solicitação (0x800710E0)

Após alterar o horário agendado para, por exemplo, 2:02, os erros desapareceram.

º
fonte