Задание Hudson зависает в Runtime.exec

Я запускаю Hudson как службу Windows через Tomcat, без участия рабов. Последний шаг сборки в работе - это командный файл, который вызывает некоторый Java-код. В коде используется инструмент командной строки PostgreSQL psql (через Runtime.exec ()) для создания базы данных на локальном компьютере и, в конечном итоге, для запуска нескольких тестов.

Работа будет продолжена до этого момента, а затем зависнет на неопределенное время, не создавая базу данных. Если я запускаю командный файл из командной строки, он работает отлично. Я не думаю, что http://hudson.gotdns.com/wiki/display/HUDSON/Spawning+processes+from+build применим, поскольку порожденный процесс даже не начинает выполняться, но я новичок в этом, поэтому, пожалуйста, дайте мне знать, если я ошибаюсь.

Отредактируйте @anjanb: Единственная цель командного файла - вызвать Java-код, и единственный пользовательский ввод передается в виде аргументов командной строки, которые, как я вижу, поступают напрямую через вывод консоли сборки.

Обозреватель процессов показывает, что psql запускается, но, очевидно, не выполняется, поскольку первая команда psql дается для создания новой базы данных, но этого не происходит.

Изменить 2: я получил несколько советов из списка рассылки пользователей Hudson, я попробую их в понедельник и отчитаюсь.

Изменить 3: код Java уже потреблял выходные потоки, я использовал эту статью при разработке кода. Я не могу понять, что происходит, поэтому переделываю код, чтобы использовать JDBC для создания базы данных, вместо того, чтобы полагаться на psql и Runtime.exec ().

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 586
2

Ответы 2

Есть вероятность, что программа ожидает ввода какого-либо пользователя. Если служба не настроена для приема пользовательского ввода, она будет зависать.

Вы можете попробовать, настроив службу, чтобы разрешить ВХОД ПОЛЬЗОВАТЕЛЯ (GUI) - это может помочь.

Также вы можете запустить Sysinternals ProcessExplorer и ProcessMonitor - они смогут узнать, где остановилось задание .BAT.

Вы читаете результаты процесса? Если он производит больше вывода, чем могут обработать буферы ОС, вам нужно его прочитать ...

Кроме того, некоторые процессы ожидают завершения ввода. Попробуйте вызвать process.getInputStream (). Close () после запуска процесса.

Может быть, эта статья тоже интересна. Это называется «Когда Runtime.exec () не работает»: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=2

Это отличный ресурс, я использовал его при написании самого кода. Он завис, но хотя бы начал создавать БД, в отличие от этого.

rjohnston 27.09.2008 05:22

Другие вопросы по теме