【问题标题】:Jenkins durable task plugin pipeline Text file busyJenkins持久任务插件管道文本文件忙
【发布时间】:2017-12-02 06:08:08
【问题描述】:

我经常收到此错误。这是非常不一致的,有时它在那里,但很多时候它不是。我在管道代码中使用持久任务插件来运行 shell 命令。我在日志中包含了上一个命令,其中一个 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文件?我正在尝试运行

【问题讨论】:

  • 这不是 Jenkins 特有的问题。请参阅例如hereherethere
  • 我在发布之前确实看过那些,我相信这是与 Jenkins 插件相关的,因为该插件是创建 workspace@tmp/durable-b87cfd9e/script.sh 的插件。我什至不确定错误是在 script.sh 文件还是 java 文件上?
  • 看起来像 java 可执行文件。你为什么chmod呢?我会说这构成了写入,并可能导致该问题。作业是否同时运行?
  • 有些作业同时运行,但每个作业都有自己的工作区,其中包含此 java 可执行文件的副本。由于某种原因,我 chmod 可执行文件没有 -x 在上一步中从存档中解压缩。但是睡眠 5、同步……还不够吗?

标签: shell jenkins jenkins-plugins jenkins-pipeline


【解决方案1】:

这里的问题似乎是由 Java 错误引起的,https://bugs.openjdk.java.net/browse/JDK-8068370

当多个线程打开一个文件进行写入,关闭它,然后执行它们(每个线程使用自己的文件)时,可能会出现此问题。即使所有文件都“正确”关闭,由于文件句柄如何围绕 fork/exec 工作,一个线程中的子进程可能会继承另一个线程打开文件的句柄,从而中断该线程稍后的子进程调用。

查看类似问题:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多