2

Ich habe eine DOS-Batch-Datei, die täglich ausgeführt wird.
Etwas Ähnliches wie -Problem mit dem Stapel als geplante Aufgabe verwechseln

@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 

Wenn ich die Batch-Datei direkt, dh doppelt cliking auf der .bat-Datei ausführen, es läuft gut, öffnet sich das Befehlsfenster und führt alle erforderlichen Befehle (beachten Sie die PAUSE) .
Aber wenn ich eine tägliche Aufgabe plane, sehe ich den Status als Running. Wenn ich mit der rechten Maustaste auf die Aufgabe klicke, kann ich die Aufgabe beenden (wenn der Status Running ist), aber ich kann das Befehlsfenster nicht sehen und daher kann ich nicht erkennen, ob es bearbeitet wurde oder den Fehler, den es erzeugt hat.
Und so kann ich nicht verstehen, ob der Fehler im Klassenpfad oder meinem Java-Code oder woanders ist.

Die Umgebung ist Windows Server 2003 R2 EE, SP2. Der Benutzer hat Administratorrechte. Ich habe überprüft, aber es gibt keine Datei von Schedlgu.txt in WINDOWS\Tasks dir.
Eine Sache, die ich bemerkte, war der CLASSPATH Wert hatte keinen Bezug auf die jdk/bin, kann das ein Problem sein? Bitte beraten.

EDIT

nur die Dinge zu vereinfachen, bemerkte ich den java Befehl für die bat-Datei einige Variablen zu tun, setzen fast nichts dann und dann Pause das Fenster offen zu halten. Immer noch kein Erfolg.

+0

Ich verstehe nicht, was Ihr Problem ist. Scheitert Ihre Aufgabe? Gibt es irgendwo einen Fehler? – Gabe

+0

Auch hier verstehe ich nicht, ob die Aufgabe fehlschlägt oder nicht. Das ist das Problem, ich sehe nirgends einen Fehler, der es viel schwieriger macht. –

Antwort

0

Nun, nach einigen Versuchen und Fehlern konnte ich endlich meine geplante Aufgabe ausführen.
Wie von Dave vorgeschlagen, habe ich die std Out in eine Textdatei umgeleitet, so dass ich sehen kann, welche Fehler generiert werden. Aber die Textdatei war leer und die Aufgabe wurde ausgeführt.
So habe ich ein 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 

und immer noch kein Ergebnis, auch jetzt die Textdatei war leer.

Dann habe ich ein einfaches HelloWorld Programm und hinzugefügt, um diesen Java-Befehl an die Bat-Datei

@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 

Die CheckHW.txt den Ausgangstext hatte, hatte ich im Programm HelloWorld gegeben.

So jetzt all diese hinzugefügt, um die Verwirrung und Ärger.

Interessanterweise und überraschend war das Problem die CLASSPATH Variable, die ich verwende, um den Klassenpfad mit dem java Befehl festzulegen.
Ich weiß nicht, wie und vor allem, warum es anfing zu arbeiten, nachdem ich die %CLASSPATH% von

SET AR_CLASS_PATH=%CLASSPATH%%COMMON_LIB% 

Die Bat-Datei in meiner Frage entfernt war und arbeitet an einem Windows XP-System ohne diese Änderung.
Ich frage mich, einige Einstellung auf dem Windows 2003 Server im Zusammenhang mit Java-Klassenpfad wurde nicht erlaubt zu verarbeiten.

0

Geplante Tasks öffnen nicht unbedingt ein sichtbares Fenster.

Wenn eine aktive Desktopsitzung für den betreffenden Benutzer zu dem Zeitpunkt ausgeführt wird, an dem die geplanten Aufgaben gestartet werden, wird in der Regel ein Fenster in dieser Sitzung erstellt. Wenn es mehr als eine solche Sitzung gibt, wird eine davon ausgewählt, aber ich bin mir nicht sicher, wie die Wahl getroffen wird. Wenn es keine solche aktive Sitzung gibt, wird überhaupt kein Fenster erstellt.

Es ist sehr wahrscheinlich, dass der Job durchläuft und dann beim PAUSE-Befehl angehalten wird. Es gibt keine Möglichkeit, eine Eingabe zu erhalten, die den Vorgang fortsetzen würde. Dies ist schwierig zu überprüfen, da PAUSE ein interner Befehl ist und nicht als separater Prozess im Task-Manager oder im Prozess-Explorer angezeigt wird. Aber wenn Sie verifizieren können, dass kein Java-Prozess läuft, würde dies die Annahme unterstützen, dass der Java-Teil des Stapels abgeschlossen ist und auf der PAUSE feststeckt.

Wenn Sie eine Batchdatei als geplante Aufgabe ausführen, ist es im Allgemeinen ratsam, sowohl die Standardausgabe als auch den Standardfehler in eine Datei umzuleiten, damit Sie nach Abschluss des Auftrags nach Fehlern suchen können.

+0

Danke für die Erklärung, ich bin aber immer noch nicht ganz davon überzeugt. Ich habe das gleiche unter Windows XP versucht und es war absolut in Ordnung. Der geplante Task hat eine Konsole geöffnet und beim PAUSE-Befehl angehalten. Sie haben jedoch einen schönen Punkt, über den Sie nachdenken sollten. Ich werde auch mit der Umleitung der stdout versuchen. –

+0

Vielen Dank Dave für Ihren Vorschlag. –

+0

Ich würde hinzufügen, anstatt PAUSE zu verwenden, könnten Sie versuchen, den Java-Befehl auszuführen mit: 'start/WAIT java ...' - dies sollte in der Theorie die Befehlsshell warten, bis das Java-Programm beendet wurde. Sie sollten dann nicht mit einem "Dangling" -Prozess belassen werden, wenn Sie ihn als geplante Aufgabe ausführen. – icabod