簡體   English   中英

將批處理作為計划任務令人困惑的問題

[英]Confusing issue with batch as a Scheduled Task


我有一個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 ),但我看不到命令​​窗口,因此無法確定它是否已處理或產生了錯誤。
因此,無法理解錯誤是在類路徑中還是在我的Java代碼中或其他地方。

環境是Windows Server 2003 R2 EE,SP2。 用戶具有管理員權限。
我檢查了一下,但是WINDOWS\\Tasks目錄中沒有Schedlgu.txt文件。
我注意到的一件事是CLASSPATH值沒有引用jdk / bin,這可能是個問題嗎? 請指教。

編輯

為了簡化操作,我對bat文件的java命令進行了注釋,使其幾乎不執行任何操作,然后設置了一些變量,然后暫停以保持窗口打開。 仍然沒有成功。

計划任務不一定打開可見的窗口。

以我的經驗,如果計划任務開始時相關用戶有一個活動的桌面會話,那么通常會在該會話中創建一個窗口。 如果此類會話不止一個,它將選擇其中一個,但是我不確定如何做出選擇。 如果沒有這樣的活動會話,那么將根本不會創建任何窗口。

作業很可能正在運行,然后停止在PAUSE命令上,而沒有辦法接收使作業繼續進行的輸入。 這是很難驗證的,因為PAUSE是內部命令,不會在任務管理器或進程資源管理器中顯示為單獨的進程。 但是,如果您可以驗證沒有Java進程正在運行,則可以認為該批處理的Java部分已經完成並且卡在了PAUSE上。

通常,將批處理文件作為計划任務運行時,將標准輸出和標准錯誤都重定向到文件是明智的,這樣您就可以在作業完成后查找錯誤。

好吧,經過一番嘗試和錯誤之后,我終於能夠使計划的任務運行。
根據Dave的建議,我將標准輸出重定向到了一個文本文件,以便可以看到生成了哪些錯誤。 但是文本文件顯示為空白,任務已運行。
所以我加了一個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程序中給出的輸出文本。

所以現在所有這些都增加了混亂和煩惱。

有趣且令人驚訝的是,這個問題是我用來通過java命令設置類路徑的CLASSPATH變量。
我不知道從我刪除%CLASSPATH%后它如何開始工作,以及為何重要

SET AR_CLASS_PATH=%CLASSPATH%%COMMON_LIB% 

我的問題中的bat文件過去一直並且正在Windows XP系統上運行,而沒有進行此更改。
我想知道Windows 2003 Server上與Java類路徑相關的某些設置不允許它處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM