我正在将构建服务器从本地计算机迁移到ec2上的虚拟计算机。我已经完成了所有工作,但是我注意到当我在shell中指定要运行的东西时,它会在实际运行指定的命令之前挂起大约30秒左右。
例如,我要做的第一件事是调用env
打印出所有环境变量以帮助排除故障:
如果我观察控制台输出,我会得到这一行,然后是微调器:
$ sh -xe C:\Windows\TEMP\hudson8414496369434804156.sh
大约30秒后,我将获得打印到控制台的环境变量列表。
在微调器没有任何输出的情况下,我可以导航到C:\Windows\TEMP\
并打开hudson8414496369434804156.sh
以确认文件位于env
的内容。所以我只能断定它只是在它坐在那里时没有调用shell ......做某事。
这不是一次性的,每次我使用Execute shell
下的Build
选项时都会这样做。我接下来要做的是通过git clone
运行Execute shell
命令,它的行为完全一样。
为什么运行shell命令需要这么长时间,如何停止此操作或减少等待时间?
我不相信这是与机器有关的性能问题,因为新机器有更好的规格:
旧机器:Pentium Dual-Core E5400 2.7GHz
,4GB RAM
,300GB HDD
,Windows 8 Pro
。
新机:Xeon E5-2670 v2 2.5GHz
,4GB RAM
,300GB HDD
,Windows Server 2012 R2
。
我没有遇到此问题的旧版Jenkins是1.517
,新版本是1.613
。在System Information
中,旧java.runtime.version
为1.7.0_21-b11
,新1.8.0_20-b26
为sh --version
。转到Window的控制面板,分别显示为Java 7 Update 17(x64)和Java 8 Update 45(x64)。
有什么想法吗?我的Google-fu失败了。欢呼声。
编辑1:
回答Slav's questions:在cmd
中运行GNU bash, version 3.1.23(6)-release (i686-pc-msys) Copyright (C) 2005 Free Software Foundation, Inc.
会立即返回.sh
并且没有延迟。
在我的桌面文件夹中创建虚拟env
文件,仅包含内容cmd
,然后在sh -xe dummy.sh
中使用readable.pipe(writable);
运行它也会立即返回,打印出来所有的环境变量。