我有一个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
命令几乎什么也没做,然后设置一些变量,然后暂停以保持窗口打开。仍然没有成功。
答案 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类路径相关的一些设置是不允许它处理的。