如何解决Windows server2008 r2任务计划程序执行批处理失败的问题
最近遇见一个奇怪的现象,在做某系统的定期备份的时候使用到了非系统自带Rsync命令,但是手动启动没问题,而且又非常期望批量化在多台主机上进行,怎么办呢?Windows Server 2003下面这样执行任务计划没问题,而就Windows Server 2008 R2下面出现意外。
正常情况下我们的任务计划会有反馈数值,通过它可以判断这个任务计划上次是否运行正常(详细连接:http://support.microsoft.com/kb/267031/)。
· 代码 0 或 0x0:操作成功完成。
· 代码 1 或 0x1:调用的函数不正确或调用了未知函数。
· 代码 10 或 0xa:环境不正确。
· 代码 0x8009000f:常规访问被拒绝
Figure 1看到上次运行结果出现非0情况
这种非〇情况表示的是不能被接受的。
通过对这个批处理设置断点,我看到了这样的报错信息。
Figure 2在批处理中加入Pause 进行断点,查看错误信息
很明显,这个rsync不是系统自带的程序和文件,因此无法被系统直接调用,猜测和环境变量有关,仔细寻找Windows Server 2008 R2 下面的任务计划选项,我看到了这个填空的地方。
Figure 3起始于(可选)项
我将这个填写成了该条脚本的所在的目录,再次运行该任务计划,得到返回成功的标记,并且在服务本分服务器端受到相应的备份内容。
这里回顾一下,两个版本操作系统的任务计划的不一样,Windows Server 2003 下面可以选择的内容,项目并不多,不过他默认的情况下会将起始于填写进去,使用的就是所在脚本的上一级目录。
Figure 4 Windows Server 2003 下面的起始于,默认被填写
因此设置Windows Server 2008 ,2012这样的基于Nt6核心的系统的任务计划的时候建议将起始于进行一下设置。
以下是其它网友提供的方法
第二种解决方法:
1、创建任务计划时,要在常规选项卡里选中“不管用户是否登录都要运行”、“使用最高权限运行”、配置选带有“Windows Server 2008 R2”这三个选项,
2、在操作选项卡里的“起始于(可选)”要填上bat批处理文件所在目录,windows 2003是在选择bat批处理文件自动带上的,而2008不会,虽然它提示是可选的,但是不填的话,执行会失败;
3、所有信息都填写完整后点确定时需要输入运行此任务的用户帐户密码;
第三种解决方法:
下面我贴一个完整的计划任务图示:
创建计划任务
定制计划任务执行时间
计划任务操作一(此情况符合单个可执行程序或者脚本不调用数据库情况下)
计划任务操作二(此情况符合运行程序需要调用目录数据库情况、PS:这个通吃吧貌似j
后面默认即可
其问题就在于编辑操作的选项里面的起始于(可选)选项。
真正问题找出来觉得很讽刺呢
贴这个帖子是想给大家一个出现问题有据可查的建议。哈哈,自己也能做个标记以防忘记。
第四种解决方法:
今天在Windows Server 2008 里新建了一个定时任务,通过定时任务执行的bat文件中的sql命令
结果查看定时任务的历史记录,发现卡住了
提示已经启动定时任务,但是bat中的操作一直没有执行
刚开始怀疑bat文件中有错误,换成了最简单的打开记事本的命令notepad,发现问题依然存在
后来发现有一个很有意思的地方,新建定时任务的时候,有2个选项:创建基本任务和创建任务
之前是创建的基本任务,后来换成创建任务
然后,问题就解决了
第五种解决方法:
新建一个管理员帐号,然后用新帐号运行就可以了。
第六种方法:其实就是第二种方法的补充
解决办法:
如图:编辑任务 把批处理文件的起始位置加上如:在d:\aa.bat
那么起始位置就是:d:\ 注:路径中不能有引号
下面引用网上的东东:
批处理文件肯定是没有问题,加入到计划任务中,发现没能正常备份,也没有拷贝到网络映射盘。
将bat文件输出到文件,本想看看log的,结果居然没有正常执行。
google了一下,发现很多网友都有类似的问题,但没人给出答案。
很幸运的找到一篇微软官方论坛上的网友讨论的帖子,几乎全部解决我的问题。
http://social.technet.microsoft.com/Forums/en-US/winservermanager/thread/d47d116e-10b9-44f0-9a30-7406c86c2fbe/ 很精彩的技术交流。
对我来说碰到了2个问题,
1, a.bat 是处理备份数据库,b.bat 内容为 a.bat > D:/abc/1.log , 将b.bat 加入的计划任务中,目的是想调试计划任务是否成功。(手动单独执行,每次都成功的)结果,是1.log不输出,计划任务中返回2; www.jb51.net
2,a.bat 中有把备份好的数据拷贝到网络映射盘,比如Z盘,计划任务每次都不执行,手动运行该脚本也是好的。
按照上面论坛给的提示:
2) Make sure that the task is set to “start in” the folder that contains the batch file: open the task properties, click on the “actions” tab, click on the action and then the “edit” button at the bottom. In the “Edit Action” Window there is a field for “start in (optional)” that you set to the path to the batch file.
在“操作”->”编辑操作”->“起始于(可选)” 中一定要填入该批处理的路径。 这一招解决了第一个问题。
NET USE W: /DELETE
NET USE W: //myserver/myfolder /PERSISTENT:YES
这个是解决第二个问题的关键,在执行拷贝,或者建立新文件夹之前,先要进行如上两行命令。 细节:确保在我的电脑界面通过菜单操作的网络映射盘式断开的;Windows server 2008 用户管理页面有个网络密码管理,如果填写了,net use w: … 这行命令就不需要输入密码和用户名。
这一招解决第二个问题。
补充一点:批处理文件中和 ”起始于(可选)“中的路径都不要使用 双引号””
第七种方法:
使用windows server 2008 R2 的任务计划程序需要启动服务 Task Scheduler 服务,
windows server 2008 R2 默认状态下Task Scheduler 服务是禁止的并且不可切换启动类型,
解决方法:修改注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Schedule 下的start项数值为2
修改后重启服务器,任务计划程序就可添加使用。
第八种方法:
网络环境:windows2003+windows2008.
描述:在win2003内使用映射驱动器Z:映射win2008的一个目录,
在win2003中创建bat 文件copy Z:中的文件,并做任务计划bat定时执行.
命令行直接执行bat没有问题,执行任务计划失败.
最终的解决方法是参考下面的文章,在bat文件中添加:
NET USE Z: \\XXX.XXX.XXX.XXX\D$\XXXX "Password" /User:"Administrator"
—-
另:win7下映射驱动器Z:,添加任务计划执行bat文件 Copy Z:\…没问题,
不存在需要手工添加命令net use的bug.
重启Win7后,任务计划消失,但其他程序创建的任务计划存在,
最后通过排除法检查发现是由于360软件作怪!需要把bat 文件和job文件同时都加入白名单.
任务计划无法正常运行批处理文件的几种解决方法
Windows 任务计划与 BAT 批处理文件都是我们经常使用的工具,一个可以帮助我们定期执行计划的任务、
有时候,我们可能会遇到任务计划与批处理无法正常协同工作的情况。例如,一个同样的批处理文件,我们
1. 在任务计划中正确设置执行批处理的用户身份与权限。
当我们在任务计划中添加新任务时,其中有一个步骤是指定运行此任务的用户帐户,并需要输入用户帐户的
例如,假设一个批处理涉及的命令需要管理员权限或者特定用户帐户的配置文件才可以正常运行,如果执行
2. 通过快捷方式为批处理指定起始位置。
有些批处理文件需要我们为其设置好特定的“起始位置”才可以正常运行,否则可能会遇到批处理无法找到
为了解决这一问题,我们可以首先为批处理文件建立一个快捷方式,然后修改快捷方式的属性,在“常规”
3. 尽量避免在批处理内容中出现过多的引号。
如果在批处理文件的内容里出现了过多的引号,即批处理中有一条或多条命令及参数被引号扩起来,这不仅
根据微软知识库 KB951246 提供的信息,这个问题主要存在于 Windows Vista/Server 2008 系统。
NET USE Z:\\XXX.XXX.XXX.XXX\D$ “Password” /User:”Administrator”
将批处理正常访问映射地址的先决命令写在原批处理文件内容的前面,最终这个批处理文件就可以通过任务
计划方式正常运行了。