更新:此事已连续发生两天。
更新:现在包括计划任务和图像的 XML。
位于伦敦的两台服务器均采用 Windows 2012,并设置了计划任务,于周一至周五下午 3 点运行。这项设置已持续了 5 个月,没有出现任何问题。
然而,8 月 28 日星期一,他们俩都在下午 3 点和下午 4 点运行了计划任务。当第一次报告时,我认为这太巧合了,不可能是时钟调慢一小时后的第二天。然而,我无法解释为什么会发生这种情况,以及这是否与时钟变化有关。
来自一台服务器的相关日志(另一台服务器的日志也遵循这种模式):
事件 129 15:00:20 任务计划程序启动任务“\3pm”,实例“C:\Program Files (x86)\PHP\v5.4\php.exe”,进程 ID 为 2388。
事件 100 15:00:20 任务计划程序为用户“x\y”启动了“\3pm”任务的“{75a3590f-dec1-4dee-bd27-73d63a50a9d7}”实例。
事件 200 15:00:20 任务计划程序在任务“\3pm”的实例“{75a3590f-dec1-4dee-bd27-73d63a50a9d7}”中启动操作“C:\Program Files (x86)\PHP\v5.4\php.exe”。
事件 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”,进程 ID 为 1224。
事件 100 16:00:20 任务计划程序为用户“x\y”启动了“\3pm”任务的“{3dd46ca9-c525-4796-86b5-5e513fd45f26}”实例。
事件 200 16:00:20 任务计划程序在任务“\3pm”的实例“{3dd46ca9-c525-4796-86b5-5e513fd45f26}”中启动操作“C:\Program Files (x86)\PHP\v5.4\php.exe”。
事件 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>
10 月 29 日 17:00 - 更新 - 两台服务器再次在 15:00 和 16:00 运行计划任务。我现在已经更新了调度程序运行的 php 文件,以便在我尝试解决此问题时实际上不执行任何操作。我打算重新启动一台服务器,看看明天这是否会有所改变。
10 月 30 日 08:25 - 更新 - 导出任务 XML 时,我记得我没有包括第二台服务器上的计划任务是通过导入第一台服务器上创建的任务的 XML 创建的这一事实。这两个任务之间的唯一区别是它们正在执行的 php 文件的路径以及它们以哪个用户帐户运行。
10 月 30 日 16:30 - 更新 - 已重启的服务器不再出现此行为,计划任务已在其上运行一次。我会等几天再重启第二台服务器,以防有人知道如何诊断为什么/如何发生这种情况
11 月 6 日 18:00 - 更新 - 我们将所有更新应用到第二台服务器并重新启动。我们以为这样可以解决问题,但是 3pm 又运行了两次 - 一次是在下午 3 点,另一次是在下午 4 点。我查看了其他计划作业,它们只运行了一次。
答案1
我们刚刚注意到我们的生产服务器(也是 Windows Server 2012)也出现了同样的问题,该问题发生在本周。这个问题也是在我们的时钟调慢一小时后出现的(即 2013 年 11 月 3 日,多伦多)。
2013 年 11 月 12 日更新:
- 重新启动不是工作(任务继续运行两次)
- 导出并重新导入任务不是工作(任务继续运行两次)
- 在 GUI 中手动重新创建任务确实可以解决问题
此外,在与微软(由我们的系统管理员)进一步讨论后,微软表示: “...该问题在 Windows Server 2012 中被发现,并且仅在 Windows 的下一个版本 Windows 8.1/Windows Server 2012 R2 中得到修复”。
答案2
当作业被安排在 UTC+0(Windows 2012 R2 服务器)时,我们可以重现错误。
例如,我们有一个作业在错误的日期运行,该作业被安排在凌晨 2 点。
由于我们的时区是 UTC+2,因此该作业在 UTC+0 运行。
似乎 Windows 存在一些舍入问题。也许它在内部使用 UTC,如果作业恰好在 UTC+0 运行,则某些舍入错误或竞争条件会导致作业在错误的日期运行。
我们还看到作业按计划运行,但在重启后报告:
操作员或管理员拒绝请求(0x800710E0)
将预定时间更改为凌晨 2:02 后,错误消失。
答案3
自从夏令时转换以来,我本周就遇到了这个问题。我知道这不是一个好答案,但删除并重新创建作业似乎可以解决问题。我测试了几个一夜之间重复的作业,重新创建的作业没有重复。
答案4
我在 Windows Server 2016 上遇到了同样的问题。
简单回顾一下历史。任务在 Windows Server 2008 R2 上运行良好已有数年。2020 年 5 月,我们将任务(XML 导入)迁移到 Windows Server 2016。
就我而言,任务在每个月 1 日的欧洲中部时间 10 点触发。问题始于 2020 年 10 月 25 日凌晨 3 点的冬令时变更后。第一个任务于 2020 年 11 月 1 日的欧洲中部时间 10 点触发,之后于 2020 年 11 月 1 日的欧洲中部时间 11 点再次触发。2020 年 12 月的欧洲中部时间 10 点和 11 点再次触发。
仅从头开始手动重新创建任务(无 XML 导入)才有帮助。