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


У меня есть пакетный файл 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)


arrow_upward
0
arrow_downward

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

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

Скорее всего, задание выполняется, а затем останавливается по команде 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

arrow_upward
0
arrow_downward

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