Windows 2008 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 批处理文件都是我们经常使用的工具,一个可以帮助我们定期执行计划的任务、

一个可以帮助我们一次执行一系列预先编好的命令。在 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"

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

(0)

相关推荐

  • Windows中使用计划任务自动执行PHP程序实例

    所谓任务计划就是由计算机自动调用用户事先设置好的应用程序,从而达到简化用户操作的目的.利用Windows 2000的任务计划程序(相当与*NIX下的cron程序,这里不再对其详述),我们可以安排任何脚本.程序或文档在最恰当的时候运行,从而满足自己的需要.下面以Windows 2000为例. 具体来说,我们若需利用任务计划程序自动运行则应执行如下步骤: 单击"开始"按钮,然后依次选择"程序"→"附件"→"系统工具"→"

  • 在WINDOWS中设置计划任务执行PHP文件的方法

    1.写一个PHP程序,命名为test.php,内容如下所示: 复制代码 代码如下: <? $fp = fopen("test.txt", "a+"); fwrite($fp, date("Y-m-d H:i:s") . " 成功成功了!\n"); fclose($fp); ?> 程序大胆地写,什么include\require尽管用,都没问题 2.新建Bat文件,命名为test.bat,内容如下所示: 复制代码 代

  • win10设定计划任务时提示所指定的账户名称无效问题解析

    我想把我的 python 爬虫脚本设定为自动定时执行,我的设备是win10 操作系统,这将用到系统自带的计划任务功能.且我希望不管用户是否登录都要运行该定时任务,但在设置计划任务的属性时,遇到一个报错:所指定的账户名称无效. 该报错是如何发生的,以及如何解决?记录如下: 报错是如何发生的? 如下图所示,设置计划任务的属性: 如果仅勾选"只在用户登录时运行",点击"确定"后直接创建成功.并不会遇到如题报错. 如果勾选"不管用户是否登录都要运行",点

  • windows系统配制wget计划任务脚本

    大家都知道wget在Linux.Unix下用得非常爽,在windows下建立计划任务,定时请求一个URL,wget优势就来了.我试几种方法,要么打开了浏览器,要么就弹出命令行的窗口,这非常讨厌!下面介绍一种更好的方法 1.下载wget windows版的文件 http://users.ugent.be/~bpuype/wget/2.新建一个vbe文件,在这个文件里调用bat文件3.新建一个bat文件,在这个文件使用wget4.把vbe添加到计划任务里 vbe文件 复制代码 代码如下: set w

  • 服务器定时执行计划任务,定时访问页面(windows/linux)

    经过我们选的一种又简单一句话就解决了问题 explorer "http://www.jb51.net?opt=make" 将上面的代码保存为dositemap.bat即可.然后添加到计划任务 一.windows计划任务 1.写一个PHP程序,命名为test.php,内容如下所示: <? $fp = fopen("test.txt", "a+"); fwrite($fp, date("Y-m-d H:i:s") . &qu

  • Windows中利用计划任务实现自动备份文件

    我们来利用windows系统的计划任务来实现数据库的备份,1,是文件夹copy到固定的文件夹,2.是把文件夹copy以当天日期的自动生成的文件夹: 1:我们公司要做一个"统计每天下线影片"的应用,我先把这个功能做成一个WinForm程序,生成一个exe文件 2:"开始->程序->附件->系统工具"中找到它,打开"计划任务"窗口 3:双击"添加已计划的任务"项,启动"计划任务向导" 4:选择

  • win2003服务器定时自动重启命令[计划任务]

    1.win2003可以这样自动重启: 新建一个命令行文件比如reboot.cmd 内容如下:shutdown -r -t 30 在计划任务中新建一个任务,程序选择上面这个reboot.cmd文件,时间定好,执行任务的用户及密码设置好 2. 你是否想睡觉或出门,但电脑又正在进行工作,不能现在就关机,这时你就一定要用到定时自动关机了吧.慢着慢着,干嘛老是要上网下载,难道你就不想成为一个操作系统的高手,XP/2003可是有这个功能的哦,就让龙龙传授你一招吧.Windows XP/2003的关机是由Sh

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

    最近遇见一个奇怪的现象,在做某系统的定期备份的时候使用到了非系统自带Rsync命令,但是手动启动没问题,而且又非常期望批量化在多台主机上进行,怎么办呢?Windows Server 2003下面这样执行任务计划没问题,而就Windows Server 2008 R2下面出现意外. 正常情况下我们的任务计划会有反馈数值,通过它可以判断这个任务计划上次是否运行正常(详细连接:http://support.microsoft.com/kb/267031/). · 代码 0 或 0x0:操作成功完成.

  • Windows 2008 R2防火墙,允许被ping的设置方法

    1.准备 1)原因 出于安全因素考虑,在Windows 2008 R2上是不允许从外部对其Ping指令,如果需要配置允许被Ping,必须通过"高级安全Windows防火墙"进行配置. 2)设备 一台Windwos 2003机器,一台Windows 2008 R2机器(这里用虚拟机做演示) Windows 2003 IP地址为:192.168.1.102 Windows 2008 IP地址为:192.168.1.103 2.图形化设置 1)Windows 2003 Ping Window

  • Windows 2008 R2 用PHP Manager for IIS 配置PHP(FastCGI)环境

    由于微软已逐步开始重视PHP ON Windows的应用,相继推出了Microsoft Web Platform,PHP Manager等IIS平台工具,x86和x64系统均可使用,再也不用为在IIS上配置PHP而烦恼了,PHP Manager用途如下: *关联PHP和IIS *并列运行多个PHP版本在同一台服务器上,甚至在同一网站 *检查PHP运行时配置和环境(的phpinfo()函数的输出) *配置各种PHP设置 *启用或禁用PHP扩展 *远程管理php.ini PHP配置文件 所以一直想体

  • Windows 2008 R2服务管理器刷新失败的解决方法

    这几天在做实验,一台服务器安装了Windows 2008 R2 X64系统,当我想安装服务器角色的时候,发现无法安装,出现了"服务器刷新失败",点击它弹出对话框提示"刷新服务器管理器时出现意外错误: 异常来自 HRESULT:0x800F0818.有关详细信息,请参阅事件日志: 诊断.事件查看器.应用程序和服务日志.Microsoft.Windows.服务器管理器.操作" 然后我就查看日志,日志内容如下: 无法发现系统的状态.找到一个意外的异常: System.Ru

  • WINDOWS 2008 r2 远程桌面账户登录限制(一个帐户两个人使用)

    在WINDOWS 2008 R2中,一个帐户是只能默认开启一个远程登录会话,如果想修改这个限制需要按下面的步骤操作: 解决方法:开始-管理工具-远程桌面服务-远程桌面会话主机配置 双击编辑设置下面的"限制每个用户只能进行一个会话",打开之后切换到常规选项,把"限制每个用户只能进行一个会话"前面的勾取消掉. 最后,应用,确定. 开始--->管理工具--->远程桌面服务--->远程桌面会话主机配置 在"编辑设置"里面找到"

  • C#动态执行批处理命令的方法

    本文实例讲述了C#动态执行批处理命令的方法.分享给大家供大家参考.具体方法如下: C# 动态执行一系列控制台命令,并允许实时显示出来执行结果时,可以使用下面的函数.可以达到的效果为: 持续的输入:控制台可以持续使用输入流写入后续的命令 大数据量的输出:不会因为大数据量的输出导致程序阻塞 友好的 API:直接输入需要执行的命令字符串即可 函数原型为: 复制代码 代码如下: /// <summary> /// 打开控制台执行拼接完成的批处理命令字符串 /// </summary> //

  • python获取程序执行文件路径的方法(推荐)

    1.获取当前执行主脚本方法:sys.argv[0]和_ file _ (1)sys.argv 一个传给Python脚本的指令参数列表.sys.argv[0]是脚本的名字.一般得到的是相对路径,用os.path.abspath(sys.argv[0])得到执行文件的绝对路径: dirname, filename = os.path.split(os.path.abspath(sys.argv[0])) os.path.realpath(sys.argv[0]) 如果在命令行执行sys.argv返回

  • Windows 2008 R2下如何进行Wincache安装与配置教程

    微软新推出了配合FastCGI模式使用的WinCache扩展,这是一个可以显著增加PHP应用在Windows环境下使用速度的PHP加速器.所有的PHP应用都能够利用这个扩展所提供的加速功能而不需要修改任何代码.所有需要做的就是将这个扩展激活并被PHP引擎读取.与eAccelerator正好相反的是WinCache要求使用NTS(非线程安全)版本的PHP,因此更适合与FastCGI配合使用. WinCache扩展包括了三种不同种类的缓存使用,下面将要分别介绍这三种缓存和他们所能提供的便利. •PH

  • Windows Server 2008 R2网站访问PHP响应慢的解决方法

    最近换了台新服务器,由于内存是8G的,所以就换了Windows Server 2008 R2 这款系统,虽然有点陌生,但是熟悉了一下感觉性能非常好,但是在配置完PHP环境之后却发现了问题,访问HTML速度飞快,而访问PHP网页时就要卡顿几秒,好像响应很慢的样子,排除了带宽的因素之后,在百度上搜了一圈,竟然解决了,现在将方法转载给大家,其实解决方法很简单哦. IIS7.5网站访问PHP响应慢的原因 原因是PHP5.3以上支持IPv6协议,但是大家的服务器未使用IPv6,当访问PHP的时候会连接My

  • Windows 2008 r2 防火墙设置端口例外的方法

    最近入手了win2008 r2的服务器,使用发现,确实比2003性能得到大量提升尤其对于高配置的机器,安全性也加强了,设置更专业,推荐大家以后都使用2008 r2的,32位与64位的软件安装无压力. 防火墙开启可以有效防止外部非法访问,能够很好的保护内网电脑.可是开启防火墙之后,很多应用服务内外网访问都有限制,那么可以通过设置防火墙端口排除例外来解决这个问题,本经验以win2008R2系统截图为例 方法/步骤 1.Windows2008R2系统防火墙在,控制面板里面去找(还可以到服务器管理器里面

随机推荐