欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

程序员文章站 2023-03-25 20:34:14
最近遇见一个奇怪的现象,在做某系统的定期备份的时候使用到了非系统自带rsync命令,但是手动启动没问题,而且又非常期望批量化在多台主机上进行,怎么办呢?windows se...

最近遇见一个奇怪的现象,在做某系统的定期备份的时候使用到了非系统自带rsync命令,但是手动启动没问题,而且又非常期望批量化在多台主机上进行,怎么办呢?windows server 2003下面这样执行任务计划没问题,而就windows server 2008 r2下面出现意外。

正常情况下我们的任务计划会有反馈数值,通过它可以判断这个任务计划上次是否运行正常(详细连接:)。

· 代码 0 或 0x0:操作成功完成。
· 代码 1 或 0x1:调用的函数不正确或调用了未知函数。
· 代码 10 或 0xa:环境不正确。
· 代码 0x8009000f:常规访问被拒绝

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

figure 1看到上次运行结果出现非0情况
这种非〇情况表示的是不能被接受的。
通过对这个批处理设置断点,我看到了这样的报错信息。

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

figure 2在批处理中加入pause 进行断点,查看错误信息

很明显,这个rsync不是系统自带的程序和文件,因此无法被系统直接调用,猜测和环境变量有关,仔细寻找windows server 2008 r2 下面的任务计划选项,我看到了这个填空的地方。

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

figure 3起始于(可选)项

我将这个填写成了该条脚本的所在的目录,再次运行该任务计划,得到返回成功的标记,并且在服务本分服务器端受到相应的备份内容。

这里回顾一下,两个版本操作系统的任务计划的不一样,windows server 2003 下面可以选择的内容,项目并不多,不过他默认的情况下会将起始于填写进去,使用的就是所在脚本的上一级目录。

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

figure 4 windows server 2003 下面的起始于,默认被填写

因此设置windows server 2008 ,2012这样的基于nt6核心的系统的任务计划的时候建议将起始于进行一下设置。

以下是其它网友提供的方法

第二种解决方法:

1、创建任务计划时,要在常规选项卡里选中“不管用户是否登录都要运行”、“使用最高权限运行”、配置选带有“windows server 2008 r2”这三个选项,

2、在操作选项卡里的“起始于(可选)”要填上bat批处理文件所在目录,windows 2003是在选择bat批处理文件自动带上的,而2008不会,虽然它提示是可选的,但是不填的话,执行会失败;

3、所有信息都填写完整后点确定时需要输入运行此任务的用户帐户密码;

第三种解决方法:

下面我贴一个完整的计划任务图示:

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

创建计划任务

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

定制计划任务执行时间

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

计划任务操作一(此情况符合单个可执行程序或者脚本不调用数据库情况下)

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

计划任务操作二(此情况符合运行程序需要调用目录数据库情况、ps:这个通吃吧貌似j
后面默认即可

其问题就在于编辑操作的选项里面的起始于(可选)选项。
真正问题找出来觉得很讽刺呢
贴这个帖子是想给大家一个出现问题有据可查的建议。哈哈,自己也能做个标记以防忘记。

第四种解决方法:

今天在windows server 2008 里新建了一个定时任务,通过定时任务执行的bat文件中的sql命令

结果查看定时任务的历史记录,发现卡住了

提示已经启动定时任务,但是bat中的操作一直没有执行

刚开始怀疑bat文件中有错误,换成了最简单的打开记事本的命令notepad,发现问题依然存在

后来发现有一个很有意思的地方,新建定时任务的时候,有2个选项:创建基本任务创建任务

之前是创建的基本任务,后来换成创建任务

然后,问题就解决了

第五种解决方法:

新建一个管理员帐号,然后用新帐号运行就可以了。

第六种方法:其实就是第二种方法的补充

解决办法:

如图:编辑任务 把批处理文件的起始位置加上如:在d:\aa.bat
那么起始位置就是:d:\ 注:路径中不能有引号

Windows 2008 r2任务计划程序执行批处理失败问题解决方法

下面引用网上的东东:

批处理文件肯定是没有问题,加入到计划任务中,发现没能正常备份,也没有拷贝到网络映射盘。
将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 批处理文件都是我们经常使用的工具,一个可以帮助我们定期执行计划的任务、

一个可以帮助我们一次执行一系列预先编好的命令。在 windows 系统的维护工作中,我们经常需要将任务
计划与批处理配合起来使用,即通过设置任务计划定期执行批处理文件定义的一系列命令与操作。

有时候,我们可能会遇到任务计划与批处理无法正常协同工作的情况。例如,一个同样的批处理文件,我们
可能手动运行它时一切正常(说明批处理文件的内容没有错误),但将这个批处理文件添加为任务计划后却
无法按照预期运行。笔者在微软中文论坛收集了几种解决任务计划与批处理无法协同工作的方法,希望可以
帮助大家在遇到类似问题时参考。

1. 在任务计划中正确设置执行批处理的用户身份与权限。

当我们在任务计划中添加新任务时,其中有一个步骤是指定运行此任务的用户帐户,并需要输入用户帐户的
密码进行确认。如果任务计划设置的用户帐户身份或权限,与我们手动运行批处理文件时的用户帐户不同,
就可能会出现以任务计划方式运行批处理的结果与手动运行同样的批处理时结果不同的现象。

例如,假设一个批处理涉及的命令需要管理员权限或者特定用户帐户的配置文件才可以正常运行,如果执行
此批处理的任务计划被指定为一个非管理员帐户或不具备相应用户配置的用户帐户,那么此批处理很可能在
以任务计划的方式运行时无法得到其预期的效果。因此,当我们在添加任务计划并希望以另一个用户帐户的
身份与权限运行批处理时,一定要在添加新任务向导中检查运行批处理的用户帐户身份与权限是否满足运行
此批处理的要求。

2. 通过快捷方式为批处理指定起始位置。

有些批处理文件需要我们为其设置好特定的“起始位置”才可以正常运行,否则可能会遇到批处理无法找到
指定路径的错误。当我们手动执行批处理时,无论是在资源管理器中用鼠标双击运行批处理,还是首先打开
命令提示符窗口、然后再在命令提示符中执行批处理,资源管理器当前打开的文件夹位置与命令提示符当前
所在的提示符位置都已经自动为我们设置好了执行批处理时的起始位置。然而,当我们以任务计划方式执行
批处理时,任务计划却无法自动指定执行批处理时所需的起始位置,这样也可能会造成以任务计划方式执行
批处理时无法得到预期的效果。

为了解决这一问题,我们可以首先为批处理文件建立一个快捷方式,然后修改快捷方式的属性,在“常规”
选项卡中设置正确的“起始位置”,接下来我们再添加任务计划,将新任务指定为这个快捷方式文件而不是
批处理本身。这样,任务计划会在任务指定的时间自动执行指向批处理的快捷方式,对应的批处理在运行时
就具有正确的起始位置了。

3. 尽量避免在批处理内容中出现过多的引号。

如果在批处理文件的内容里出现了过多的引号,即批处理中有一条或多条命令及参数被引号扩起来,这不仅
可能在编写批处理命令时容易出错,而且可能会造成特定版本 windows 的任务计划无法正确识别批处理中
包含的命令。特别是在一个父级引号中还有子级的引号时,尤其容易出现此类问题。

根据微软知识库 kb951246 提供的信息,这个问题主要存在于 windows vista/server 2008 系统。
 
4. 将批处理文件转换为可执行文件或脚本后再添加任务计划。
 
有时当任务计划无法正确执行批处理文件的部分内容时,我们还可以尝试将批处理转换为其它格式的可执行
文件或脚本,然后再添加至任务计划。转换格式虽然执行的命令与任务不变,但将批处理转换为可执行文件
或脚本可以改变任务运行的顺序与方式,有时说不定可以解决问题。
 
批处理常见的格式转换包括将 .bat 文件转换为 .exe 或 .com 可执行文件,或者转换为 .vbs 脚本,这类
转换可以通过 bat2exe、bat2com、bat to exe converter、批处理加密转换器等第三方软件实现。
5. 在批处理中添加为正常运行后续命令所需的先决命令。
如果我们遇到了一些比较极端的批处理与任务计划无法协同工作的问题,无论怎样在任务计划的运行环境中
设置都不能解决,那么可以考虑将一些正确完成批处理命令所需的先决命令添加在原批处理内容的最前面,
在批处理自身的层面加以解决。
 
例如,笔者最近在微软中文论坛见到一则问题:有位用户编写了一个备份开发代码的批处理,并将其添加为
任务计划,希望在每天凌晨时自动运行。但是,这个批处理涉及的文件备份与复制操作需要访问 $ipc 网络
映射地址。经测试,用户编写的批处理内容没有问题,如果手动运行批处理,可以正确地访问目标地址并且
完成备份;但如果将此批处理添加为任务计划就无法正确执行备份与复制操作。设置任务计划的用户权限、
设置起始位置、对批处理进行格式转换等方法均无法解决。最终解决这个问题的方法是在批处理内容的前面
添加了一条:

net use z:\\xxx.xxx.xxx.xxx\d$ "password" /user:"administrator"

将批处理正常访问映射地址的先决命令写在原批处理文件内容的前面,最终这个批处理文件就可以通过任务
计划方式正常运行了。