【问题标题】:Scheduled task runs but launches batch only after minor modification计划任务运行但仅在稍作修改后才启动批处理
【发布时间】:2015-08-04 11:03:50
【问题描述】:

我在 Windows server 2008 R2 上遇到问题。

我使用域帐户安排了一个每天在固定时间运行的任务,它启动一个 .bat 文件,该文件调用传递一些参数的可执行文件。

它工作了几个月,然后没有任何明显的原因停止工作:任务历史显示任务实际启动,它不报告错误但可执行文件什么也不做。

我注意到:

  • 如果我在执行任务时登录远程桌面。

  • 如果我对任务进行小幅修改(将开始时间更改 1 秒)并将其保存,那么即使我没有登录,任务也会恢复正常行为。

  • 在同一台服务器上以同一帐户运行的其他类似任务正常工作。

  • 这是同一服务器上的计划任务第二次出现此问题。

似乎任务中的某些内容已损坏,强制保存可恢复正常操作。

我已经检查过了:

  • 如果手动启动,任务可以正常运行;
  • .bat 和 exe 的权限是任务帐户的完全控制;
  • 帐户密码未更改;
  • “开始于”字段是 .bat 路径;
  • 不涉及映射驱动器;
  • 任务使用域帐户运行,该域帐户也是机器管理员,它配置有最高权限,当然用户是否已登录。

无论如何,该任务几个月都可以正常工作,并且只需强制保存任务即可恢复工作,因此配置应该没问题。

您对检测和预防此问题有什么建议吗?

【问题讨论】:

  • 我会尝试 1. 重新创建任务 2. 清除任务调度程序 registry cache 以防万一。
  • 两个任务可能同时启动并尝试访问同一个文件。在这种情况下,在获得文件独占读/写访问权的竞赛中,另一个任务在文件访问上要快一些。

标签: batch-file scheduled-tasks windows-server-2008-r2


【解决方案1】:

不幸的是,我唯一能想到的就是为您的第一个任务添加一个输出时间戳的步骤,然后创建一个计划任务来检查时间戳以确保其“当前”。

出于好奇,当这种情况发生时,任务是否在以编程方式检查时显示它已设置?

Dim rootFolder As TaskScheduler.ITaskFolder
Dim task As TaskScheduler.IRegisteredTask

' Create the TaskService object.
Set service = CreateObject("Schedule.Service")
service.Connect strHostname, strUsername, strDomain, strPassword

' Get the task folder that contains the tasks.
Set rootFolder = service.GetFolder("\")
Set task = rootFolder.GetTask(strNameOfTask)
WScript.Echo task.Name & " (Enabled: " & task.Enabled & ") Last Run: " & task.LastRunTime

另外,当您查看 C:\Windows\System32\Tasks 时,该任务的 XML 文件是否仍然有效?

在不确切知道流程的哪一部分出错的情况下,很难判断在哪里寻找解决方案。

【讨论】:

    猜你喜欢
    • 2012-09-12
    • 2015-02-23
    • 2019-04-06
    • 2014-12-12
    • 2013-03-01
    • 2016-10-16
    • 2014-09-14
    • 2013-10-19
    • 1970-01-01
    相关资源
    最近更新 更多