Непонятная проблема с пакетом как запланированным заданием


У меня есть пакетный файл 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, может ли это быть проблемой? Пожалуйста, порекомендуйте.

ИЗМЕНИТЬ

Просто для упрощения я прокомментировал команду java для bat-файла, чтобы она почти ничего не делала, затем установил некоторые переменные, а затем сделал паузу, чтобы окно оставалось открытым. До сих пор нет успеха.


person Swift-Tuttle    schedule 06.01.2011    source источник
comment
Я не понимаю, в чем твоя проблема. Ваша задача не выполняется? Где-то ошибка?   -  person Gabe    schedule 06.01.2011
comment
То же самое здесь, даже я не понимаю, не выполняется задание или нет. Вот в чем проблема, я нигде не вижу ошибки, что делает ее намного сложнее.   -  person Swift-Tuttle    schedule 06.01.2011


Ответы (2)


Запланированные задачи не обязательно открывают видимое окно.

По моему опыту, если есть активный сеанс рабочего стола для соответствующего пользователя во время запуска запланированных задач, то он обычно создает окно в этом сеансе. Если таких сеансов несколько, он выберет один из них, но я не уверен, как делается выбор. Если такого активного сеанса нет, то окно вообще не будет создано.

Скорее всего, задание выполняется, а затем останавливается по команде PAUSE, и нет возможности получить ввод, который заставил бы его продолжить. Это трудно проверить, так как PAUSE — это внутренняя команда, которая не будет отображаться как отдельный процесс в диспетчере задач или Process Explorer. Но если вы можете убедиться, что процесс java не запущен, это поддержит убеждение, что java-часть пакета завершена и застряла в PAUSE.

Как правило, при запуске пакетного файла в качестве запланированной задачи целесообразно перенаправить как стандартный вывод, так и стандартную ошибку в файл, чтобы вы могли искать ошибки после завершения задания.

person Dave Costa    schedule 06.01.2011
comment
Спасибо за объяснение, я все еще не полностью убежден. Я пробовал то же самое на Windows XP, и все было в порядке. Запланированная задача открыла консоль и остановилась по команде PAUSE. У вас есть хорошая мысль, над которой стоит задуматься. Я также попробую перенаправить файл stdout. - person Swift-Tuttle; 06.01.2011
comment
Большое спасибо, Дэйв, за ваше предложение. - person Swift-Tuttle; 07.01.2011
comment
Я бы добавил, что вместо использования PAUSE вы можете попробовать запустить команду Java с помощью: start /WAIT java ... - теоретически это должно заставить командную оболочку ждать, пока программа Java не завершит работу. Тогда у вас не должно остаться зависшего процесса при запуске его как запланированного задания. - person icabod; 07.01.2011
comment
@icabod, моя главная проблема была не в «висячем» процессе, вызванном PAUSE, так как даже без PAUSE ничего не происходило. Как я позже узнал, по какой-то причине команда java не выполнялась, и в конце концов обнаружил, что это связано с настройкой пути к классам в команде java. Я объяснил в своем ответе, как я преодолел эту проблему. Хотя я до сих пор не понимаю, почему с переменной CLASSPATH он не работал. - person Swift-Tuttle; 08.01.2011

Что ж, после некоторых проб и ошибок я наконец смог запустить свою запланированную задачу.
Как предложил Дейв, я перенаправил стандартный вывод в текстовый файл, чтобы я мог видеть, какие ошибки генерируются. Но текстовый файл оказался пустым, и задача была запущена.
Поэтому я добавил 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, связанная с путем к классу Java, не позволяла ему обрабатываться.

person Swift-Tuttle    schedule 07.01.2011