【问题标题】:Hudson job hangs at Runtime.exec哈德逊作业挂在 Runtime.exec
【发布时间】:2008-09-26 05:58:48
【问题描述】:

我通过 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()

【问题讨论】:

    标签: java hudson runtime.exec


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是一个很棒的资源,我在编写代码时使用了它。它挂了,但它至少开始创建数据库,不像现在。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-21
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      相关资源
      最近更新 更多