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.


É 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" .


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.