我经常收到此错误。它非常不一致,有时它会在那里,而且往往不是。我在管道代码中使用持久任务插件来运行shell命令。我在log previous命令中包含了一个chmod,它将执行标志添加到java文件中。
Running in /var/lib/jenkins/jobs/My_Jobs/jobs/ubuntuvm04/workspace/build/tools/java/jre/bin
[Pipeline] {
[Pipeline] sh
[bin] Running shell script
+ chmod +x ./java
[Pipeline] sh
[bin] Running shell script
+ sync
[Pipeline] sh
[bin] Running shell script
+ sleep 5
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (check java version)
[Pipeline] sh
[workspace] Running shell script
+ ./build/tools/java/jre/bin/java -version
/var/lib/jenkins/jobs/My_Jobs/jobs/ubuntuvm04/workspace@tmp/durable-b87cfd9e/script.sh: line 2: ./build/tools/java/jre/bin/java: Text file busy
.
我几乎放弃了这个错误,我担心我最终会编写代码来重试执行失败的行,但基于该错误,文本文件是否忙碌问题涉及插件制作的script.sh,还是java文件?我试图运行
答案 0 :(得分:1)
这里的问题似乎是由Java错误https://bugs.openjdk.java.net/browse/JDK-8068370引起的。
当多个线程打开一个文件进行写入,关闭该文件然后执行它们(每个线程使用其自己的文件)时,可能会出现此问题。即使所有文件都“正确”关闭,由于文件句柄是如何在fork / exec周围工作的,一个线程中的子进程可能会继承该句柄到另一个线程的打开文件中,从而中断该线程的后续子进程调用。
看到类似的问题: