2008-09-26 80 views
2

我通過Tomcat運行Hudson作爲Windows服務,沒有涉及到奴隸。作業中的最後一個構建步驟是調用一些Java代碼的批處理文件。該代碼使用PostgreSQL的命令行工具psql(通過Runtime.exec())在本地機器上創建數據庫,並最終針對它運行一些測試。Hudson的工作掛在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()

回答

0

程序有可能等待一些用戶輸入。如果該服務未配置爲接受用戶輸入,則它將顯示爲掛起。

你可以嘗試通過配置服務來允許用戶輸入(GUI) - 這可能會有所幫助。

此外,您可以運行Sysinternals ProcessExplorer和ProcessMonitor - 他們將能夠找出.BAT作業已停止的位置。

3

您是否閱讀過程的輸出?如果產生的輸出比OS緩衝區可以處理的更多,則需要讀取它...

此外,有些進程會等待輸入完成。嘗試在啓動進程後調用process.getInputStream()。close()。

也許這篇文章也很有趣。它被稱爲「當Runtime.exec()不會」: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=2

+0

這是一個很好的資源,我用它來寫代碼本身。它掛起來了,但至少現在開始創建數據庫。 – rjohnston 2008-09-27 01:22:44