![](/img/trans.png)
[英]Running a batch file as a scheduled task does not behave as it should?
[英]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.