我正在使用 Windows Server 2003 并且有一个无法完成的计划任务。该任务设置为每天下午 3 点运行 Windows 命令脚本 (.cmd)。该脚本运行一个程序,该程序从 SQL Server 数据库中提取一些数据并将该数据上传到 FTP 服务器。
计划任务文件夹的“最后结果”列中显示的错误代码为 0xc000013a。快速谷歌搜索导致这个微软支持页面指出:最常见的“C”错误代码是“0xC000013A:应用程序因 CTRL+C 而终止”。
任务运行时没有人登录,因此没有人可以按 CTRL+C。我不确定我是否理解 Microsoft 文档中所说的内容。
我已经检查了基本的东西 - 计划任务已启用,计划每天运行,并指向一个确实存在于有效位置的文件。有趣的是,当我手动运行此任务时(通过从命令行运行 .cmd 脚本,或通过右键单击该任务并单击“运行”),该任务成功完成。
这个错误代码是什么意思,当我不在那里强制它时,我怎样才能让这个任务运行?
排查计划脚本问题:
如果您还没有,请检查计划任务日志文件,在 GUI 中的Advanced > View Log下。在文件中搜索“
***
”以查找最近的条目,您可能会看到一些额外的错误信息。定义一个日志文件来捕获输出,并在那里发送标准输出和标准错误。将任何echo OFF更改为echo ON以确保您没有抑制任何错误消息。
例如,如果您的脚本被调用,
ftp.data.cmd
那么您的计划任务可能如下所示,cmd /c ftp.data.cmd >> ftp.data.log 2>&1
剧本挂了吗?也许任务调度程序在某个指定的时间段后正在终止脚本(因此出现 CTRL+C 错误代码)。在您的 scipt 中的战略点添加其中一些,
echo %DATE% %TIME%
您确定运行脚本的帐户有权/访问脚本中的所有内容吗?
如果您无法获得任何乐趣,请运行此命令并在此处发布输出,也许我们可以从调度开始,
schtasks /query /v /fo LIST /s YOURSERVER
我不能直接回答这个问题,因为我不知道错误消息的具体含义(因此也不知道如何修复它),但如果我试图解决它,我会在日志文件中添加一些写入脚本中的战略点,然后在预定时间之后查看要运行的最后一个检查点是什么。
我的怀疑是由于脚本正在运行的凭据或脚本中的某些内容需要登录用户而导致失败。缩小脚本中失败的地方可能会帮助您找到“有问题的”代码。
我意识到这是一篇旧帖子,但它们在寻找解决方案时非常有帮助,也许我发现的内容也有帮助。我在 Windows Server 2003 上使用 WinSCP 上传到 ftp 服务器并收到相同的错误消息,并且 SchedLgU.txt 文件指出“停止任务如果它适合:”部分中没有足够的时间,即使我给出了任务有足够的时间上传。
查看任务管理器,我可以看到 WinSCP.exe 没有清除,并且列表中有大量进程,所以我创建了一个批处理文件 (taskkill /f /im winscp.exe) 来杀死任何打开的进程,然后我在 WinSCP 之前运行该批处理文件,它现在运行良好。
我今天在远程服务器上遇到了这个问题,解决方案是将运行设置从“仅在用户登录时运行”更改为“无论用户是否登录都运行”。
使用“仅在用户登录时运行”任务启动一个命令窗口,该窗口在我的远程桌面会话超时时关闭。使用“无论用户是否登录都运行”任务运行时不会显示任何窗口,因此当我的远程桌面会话结束时执行不会停止。
与cori的回答类似,我建议您检查计划任务设置为谁运行,因为我已经看到当运行任务的用户帐户与登录用户没有相同的权限时会发生此错误
如果之前运行过,也许网络中断或另一台主机上的问题等情况可以解释失败。
我遇到了同样的错误,这是因为我正在运行的批处理文件提示使用 DEL 命令删除一些文件。由于没有用户回答 Y/N 来批处理,计划任务被终止。以下是我在计划任务日志中发现的消息:“任务已终止。此操作由管理员或任务计划程序服务启动(例如,因为计算机现在非空闲)。” 我的建议是从命令提示符手动运行任务,以查看它在哪里停止或提示进行某些用户交互,更正它,您的任务将运行良好。
如果您尝试在任务计划程序控制下运行程序,System.Environment.CurrentDirectory 将返回 C:\Windows\System32,而不是您的可执行文件所在的位置。此错误可能是文件未找到错误;我试图登录到一个子目录,它在 System32 树中不存在。
在我的脚本中,这很清楚。这是因为我在批处理文件末尾有“暂停”,并且计划任务限制为 20 分钟。当用户在场时,hi 可以看到作业的流程。20分钟后,计划任务何时终止批处理文件。这会导致 0xc000013a 并且没关系。
我遇到了同样的问题,并通过将触发器从“系统启动时”更改为“登录时”来修复它。