2 votes

Problème de confusion avec le lot en tant que tâche programmée

J'ai un fichier batch DOS à exécuter quotidiennement.
Quelque chose de semblable à -

@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

Lorsque j'exécute le fichier batch directement, c'est-à-dire en double-cliquant sur le fichier .bat, il fonctionne bien, la fenêtre de commande s'ouvre et exécute toutes les commandes requises (notez l'en-tête de commande). PAUSE ).
Mais lorsque je planifie une tâche quotidienne, le statut est "en cours". De même, lorsque je clique avec le bouton droit de la souris sur la tâche, j'ai la possibilité de mettre fin à la tâche (lorsque le statut est "en cours"). Running ) mais je ne vois pas la fenêtre de commande et je ne peux donc pas voir si elle a été traitée ou l'erreur qu'elle a générée.
Et donc, je ne peux pas comprendre si l'erreur est dans le classpath ou dans mon code java ou ailleurs.

L'environnement est Windows Server 2003 R2 EE, SP2. L'utilisateur a des privilèges d'administrateur.
J'ai vérifié, mais il n'y a pas de fichier Schedlgu.txt dans la base de données. WINDOWS\Tasks dir.
Une chose que j'ai remarquée, c'est que CLASSPATH n'avait aucune référence à la jdk/bin, cela peut-il être un problème ? Veuillez me conseiller.

EDIT

Pour simplifier les choses, j'ai commenté le java pour que le fichier bat ne fasse presque rien, puis définisse quelques variables et enfin fasse une pause pour garder la fenêtre ouverte. Toujours pas de succès.

0voto

Dave Costa Points 25282

Les tâches planifiées n'ouvrent pas nécessairement une fenêtre visible.

D'après mon expérience, s'il existe une session de bureau active pour l'utilisateur concerné au moment où les tâches planifiées démarrent, elles créent généralement une fenêtre dans cette session. S'il y a plus d'une session de ce type, il en sélectionnera une, mais je ne sais pas exactement comment le choix est fait. S'il n'y a pas de session active, aucune fenêtre ne sera créée.

Le plus probable est que le travail s'exécute et s'arrête à la commande PAUSE, sans possibilité de recevoir des entrées qui le feraient continuer. Ceci est difficile à vérifier car PAUSE est une commande interne et n'apparaît pas comme un processus distinct dans le Gestionnaire des tâches ou l'Explorateur de processus. Mais si vous pouvez vérifier qu'il n'y a pas de processus java en cours d'exécution, cela confirmerait que la partie java du lot est terminée et qu'elle est bloquée par la commande PAUSE.

En général, lorsqu'un fichier batch est exécuté en tant que tâche planifiée, il est judicieux de rediriger la sortie standard et l'erreur standard vers un fichier afin de pouvoir rechercher les erreurs une fois la tâche terminée.

0voto

Swift-Tuttle Points 151

Eh bien, après quelques essais et erreurs, j'ai finalement réussi à faire fonctionner ma tâche planifiée.
Comme suggéré par Dave, j'ai fait rediriger la sortie std vers un fichier texte, afin que je puisse voir quelles erreurs sont générées. Mais le fichier texte est sorti vierge et la tâche a été exécutée.
J'ai donc ajouté un 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

et toujours pas de résultat, même maintenant le fichier texte était vide.

Ensuite, j'ai créé un simple HelloWorld et ajouté cette commande java au fichier 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

Le CheckHW.txt contenait le texte de sortie que j'avais donné dans le fichier HelloWorld programme.

Tout cela n'a fait qu'ajouter à la confusion et à l'ennui.

De manière intéressante et surprenante, la question était la suivante CLASSPATH que j'utilise pour définir le classpath avec la variable java commandement.
Je ne sais pas comment et surtout pourquoi il a commencé à fonctionner après que j'ai enlevé le %CLASSPATH% de

SET AR_CLASS_PATH=%CLASSPATH%%COMMON_LIB% 

Le fichier bat dans ma question fonctionnait et fonctionne toujours sur un système Windows XP sans ce changement.
Je me demande si un paramètre du serveur Windows 2003 lié au chemin de la classe Java ne permettait pas le traitement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X