2

我通过 Tomcat 将 Hudson 作为 Windows 服务运行,不涉及任何从站。作业中的最后一个构建步骤是调用一些 Java 代码的批处理文件。该代码使用 PostgreSQL 的命令行工具 psql(通过 Runtime.exec())在本地机器上创建一个数据库,并最终针对它运行一些测试。

该作业将进行到这一点,然后无限期地挂起而不开始创建数据库。如果我从命令行运行批处理文件,它会完美运行。我认为http://hudson.gotdns.com/wiki/display/HUDSON/Spawning+processes+from+build不适用,因为生成的进程似乎还没有开始执行,但我对此并不陌生所以如果我错了,请告诉我。

编辑@anjanb:批处理文件的唯一目的是调用 Java 代码,唯一的用户输入作为命令行参数传入,我可以看到它直接通过构建的控制台输出进入。

Process Explorer 显示 psql 正在启动,但它显然没有被执行,因为给出的第一个命令 psql 是创建一个新数据库,但这并没有发生。

编辑 2:我从 Hudson 用户邮件列表中获得了一些提示,我将在周一试用并报告。

编辑 3:Java 代码已经在使用输出流,我在开发代码时使用了那篇文章。我不知道发生了什么,所以我正在重新开发代码以使用 JDBC 来创建数据库,而不是依赖 psql 和 Runtime.exec()

4

2 回答 2

3

你读过这个过程的输出吗?如果它产生的输出比操作系统缓冲区可以处理的多,则需要阅读它...

此外,一些进程会等到输入完成。启动进程后尝试调用 process.getInputStream().close()。

也许这篇文章也很有趣。它被称为“当 Runtime.exec() 不会”: http ://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=2

于 2008-09-26T22:04:15.147 回答
0

程序可能正在等待某些用户输入。如果该服务未配置为接受用户输入,它将显示为挂起。

您可以尝试通过将服务配置为允许 USER INPUT(GUI) - 这可能会有所帮助。

此外,您可以运行 Sysinternals ProcessExplorer 和 ProcessMonitor——它们将能够找出 .BAT 作业停止的位置。

于 2008-09-26T06:06:17.317 回答