将批处理问题作为计划任务混淆

时间:2011-01-06 13:08:00

标签: java batch-file windows-server-2003 classpath scheduled-tasks


   我有一个DOS批处理文件每天运行 类似的东西 -

@ECHO ON
SET COMMON_LIB=commons-io-1.3.1.jar;
SET AR_CLASS_PATH=%CLASSPATH%%COMMON_LIB%

java -cp %AR_CLASS_PATH% -Xms128m -Xmx256m FileCreating

PAUSE

当我直接运行批处理文件,即在.bat文件上双重克隆时,它运行正常,命令窗口打开并执行所有必需的命令(注意PAUSE)。 但是,当我安排每日任务时,我将状态视为正在运行。此外,当我右键单击任务时,它为我提供了一个结束任务的选项(当状态为Running时)但我无法看到命令窗口,因此我无法确定是否已处理或错误它产生了。
所以,无法理解错误是在classpath还是我的java代码或其他地方。

环境是Windows Server 2003 R2 EE,SP2。用户具有管理员权限 我查了但是WINDOWS\Tasks目录中没有Schedlgu.txt文件 我注意到的一件事是CLASSPATH值没有引用jdk / bin,这可能是个问题吗? 请指教。

编辑

为了简化操作,我评论了bat文件的java命令几乎什么也没做,然后设置一些变量,然后暂停以保持窗口打开。仍然没有成功。

2 个答案:

答案 0 :(得分:0)

计划任务不一定打开可见窗口。

根据我的经验,如果在计划任务开始时有相关用户的活动桌面会话,那么它通常会在该会话中创建一个窗口。如果有多个这样的会话,它将选择其中一个,但我不确定如何做出选择。如果没有这样的活动会话,则根本不会创建任何窗口。

似乎很可能该作业正在运行然后停在PAUSE命令,无法接收将继续的输入。这很难验证,因为PAUSE是一个内部命令,不会在任务管理器或Process Explorer中显示为单独的进程。但是如果你可以验证没有运行java进程,这将支持批处理的java部分已经完成并且它停留在PAUSE上的信念。

通常,在将批处理文件作为计划任务运行时,最好将标准输出和标准错误重定向到文件,以便在作业完成后查找错误。

答案 1 :(得分:0)

好吧,经过一些反复试验,我终于能够完成预定的任务了 正如Dave所建议的那样,我将std重定向到一个文本文件,以便我可以看到生成了什么错误。但文本文件空白,任务已运行 所以我添加了java -version

@ECHO ON

SET COMMON_LIB=commons-io-1.3.1.jar;
SET AR_CLASS_PATH=%CLASSPATH%%COMMON_LIB%

java -version

java -cp %AR_CLASS_PATH% -Xms128m -Xmx256m FileCreating

仍然没有结果,即使现在文本文件是空白的。

然后,我创建了一个简单的HelloWorld程序,并将此java命令添加到bat文件

@ECHO ON

SET COMMON_LIB=commons-io-1.3.1.jar;
SET AR_CLASS_PATH=%CLASSPATH%%COMMON_LIB%

java -version

java HelloWorld > C:\ChechHW.txt

java -cp %AR_CLASS_PATH% -Xms128m -Xmx256m FileCreating

CheckHW.txt有我在HelloWorld程序中给出的输出文本。

所以现在所有这些都增加了混乱和烦恼。

有趣且令人惊讶的是,问题是我使用CLASSPATH变量来设置带有java命令的类路径。 在我从

中删除%CLASSPATH%之后,我不知道为什么它开始工作的原因和重要性
SET AR_CLASS_PATH=%CLASSPATH%%COMMON_LIB% 

我的问题中的bat文件是在没有此更改的情况下在Windows XP系统上运行 我想知道Windows 2003 Server上与Java类路径相关的一些设置是不允许它处理的。