问题解决之道:一个有关Scheduled Task的诡异问题

在生产环境下有一台服务器,OS为Windows Server 2012 R2。在上面配置了几个计划任务(Scheduled Task),这些任务会定时执行一段脚本(bat脚本),脚本将运行一些带参数的coreftp.exe命令,以实现文件通过FTP方式上传与下载。


问题解决之道:一个有关Scheduled Task的诡异问题_第1张图片
服务器基本信息

这些计划任务一直都运行得很好,直到今天发生了错误,无法正常实现文件的上传与下载。任务的返回编码为0xC000005

问题解决之道:一个有关Scheduled Task的诡异问题_第2张图片
错误编码

打开了Scheduled Task的History功能,尝试追踪具体的错误信息。结果得到的具体错误信息为:

问题解决之道:一个有关Scheduled Task的诡异问题_第3张图片
History-1
问题解决之道:一个有关Scheduled Task的诡异问题_第4张图片
History-2

问题解决之道:一个有关Scheduled Task的诡异问题_第5张图片
History-3

从图History-3中,可以看出cmd.exe执行脚步时的返回码为 3221225477。凭直觉,这个返回码肯定是不正常的,因为Windows系统的操作返回码一般用0x00代表命令执行成功。很好奇这个错误代码代表什么含义,是什么原因引起的。利用bing.com搜索了一下,找到了一份MS-DOS命令执行返回码的解释文档,如下图:

问题解决之道:一个有关Scheduled Task的诡异问题_第6张图片
MS-DOS返回码解释

从该文档可以看出,原因可能是 Access violation. Indicates that the executed program has terminated abnormally or crashed.,中文的解释为:“访问不合法。意味着可执行程序非正常终止或崩溃”。看完解释有点让人一头雾水,之前是一直正常的,访问非法怎么会发生呢?在迷惑不解了几分钟后,突然冒出一个猜测,是不是coreftp.exe进程未被正常关闭,仍然停留在内存中?自己立马利用资源管理器查看服务器的所有进程,看看是否存在coreftp.exe进程。果不其然,coreftp.exe仍然在内存运行着,这个进程估计是上次非正常退出造成。由于这个进程的存在,导致新的进程无法被启动,结果MS-DOS返回了那个错误码。强制杀死了这个进程,运行了几个Scheduled Task,发现一切恢复正常。

做个小结,技术的问题有时总让人摸不着头脑,甚至毫无头绪。这时需要冷静头脑,搜集尽可能多的错误与调试信息,不要放过与错过每个细节,对每个步骤与细节都要弄清楚搞明白,判断是否存在问题。一旦定位了问题所在之处,要充分利用网络寻求帮助,看看是否有人遇到类似的问题,是否有相应的解决方案。对于没有现成解决方案的问题,需要利用积累的技术知识与经验,充分发挥想象力去寻找问题的原因与解决办法,不断地反复去验证自己的猜测与想法。重复一遍,遇到技术问题,一定要保持清醒的头脑,切勿东拉西扯“乱打一气”。内心越着急,有时越无法解决问题。我想这些同样适用于其他任何非技术问题的解决之道。

你可能感兴趣的:(问题解决之道:一个有关Scheduled Task的诡异问题)