我希望能够快速解决这个问题...非常紧急。感谢您的帮助。
可能是psexec
在等待用户输入,如果是这种情况,Hudson将会挂起。
Hudson是否使用您的用户凭据运行?如果没有,请使用Hudson正在运行的凭据启动命令提示符,并查看调用psexec
时会发生什么。如果Hudson在本地系统帐户上运行,则无法使用它启动命令提示符。然后尝试使用您的凭据运行Hudson并查看会发生什么。
顺便问一下,您是否检查过Hudson的日志文件(以防万一有什么东西)?
我曾经遇到过PSEXEC卡住的问题。
在长时间的搜索后,我找到了解决方案,即在调用PSEXEC时添加参数-accepteula。之后,Hudson就不再卡住了。
这真是令人沮丧。
我想回应一下这个问题,因为我在使用TeamCity和psExec时也遇到了同样的卡顿问题。由于我认为这实际上是Java执行psexec时出现的问题,所以在Hudson的情况下也应该适用。
虽然我早期遇到了accepteula问题,但您只需要同意一次并设置一个注册表设置即可。如user327759所示,在脚本中使用-accepteula开关可以覆盖您的基础,并且永远不会再次出现。
如果这不能解决您的问题,就像在我的情况下一样,您需要添加"-i"命令开关。例如:psexec -i \ServerName "C:\folder\file.bat"
为了说明这个解决方案的背景,我包括了我的故事:
我能够通过MsBuild任务、.Net包装器和直接命令提示符使用成功执行此PsExec命令,但是TeamCity在执行时会卡住。似乎Java在调用psexec exe时期望在标准输入上得到一些响应。在远程服务器上,我会看到psexecsvc进程启动并适当地在服务控制台中注册,但然后它就会停止。在阅读了许多帖子(例如这篇),并且挣扎了比我愿意承认的时间之后,我最终尝试了-i选项,尽管在TeamCity之外的任何其他执行场景中都不需要它。psexec文档指出,-i将“以与远程系统上指定会话的桌面交互方式运行程序。如果未指定会话,则该进程在控制台会话中运行。”目前仍不清楚为什么这对于TeamCity如此重要。也许现在已经有点晚了,但我想为其他遇到同样问题的人发布这篇文章。
Psexec在任何CI服务器上运行时都会出现问题,无论你使用的是Hudson、Teamcity等哪种CI服务器。 当从构建服务器运行Psexec时,它会挂起。 并非所有命令都会挂起,但对于某些命令,Psexec将会挂起。 问题在于Psexec如何读取远程运行命令的输出。 最终的解决方案是使用除Psexec之外的其他工具。 您可以查看此解决方案的博客。 但如果您需要一个更简单的解决方案,并且不关心命令的输出,我想到了一个简单的解决方案,即抑制Psexec的输出。 您可以编写一个小的C#程序来运行Psexec命令,抑制其输出。