/usr/bin/perl:错误的解释器:文本文件忙

Posted

技术标签:

【中文标题】/usr/bin/perl:错误的解释器:文本文件忙【英文标题】:/usr/bin/perl: bad interpreter: Text file busy 【发布时间】:2010-11-25 22:40:38 【问题描述】:

这对我来说是新的:这个错误说明什么?

  /usr/bin/perl: bad interpreter: Text file busy

当时有几个磁盘密集型进程正在运行,但我以前从未见过该消息——事实上,这是我记得第一次在尝试运行 Perl 脚本时遇到错误。等待几秒钟后,我能够运行它,并且从那以后就没有看到这个问题,但如果能对此进行解释就好了。

运行Ubuntu 9.04,文件系统为ext3。

【问题讨论】:

另见顺丰:serverfault.com/questions/21561/bad-interpreter-text-file-busy 【参考方案1】:

我猜你遇到了this issue。

如果您的 Perl 脚本(或任何其他类型的脚本)在您尝试执行时打开以供写入,Linux 内核将生成 bad interpreter: Text file busy 错误。

您没有说磁盘密集型进程在做什么。有没有可能他们中的一个人打开了脚本以进行读写访问(即使它实际上没有写任何东西)?

【讨论】:

这听起来很合理 - 我正在编写脚本,这发生在我保存它然后尝试运行它时。 因此,“磁盘密集型进程”可能没有直接对您的脚本执行任何操作,但它使磁盘保持足够繁忙,以至于您在写出脚本时停止并保持打开几秒钟。 这就是我的想法——无论如何这似乎都有意义。 这可能意味着脚本正在被写入,解释器本身正在被写入——在任何一种情况下都会发生相同的错误。 谢谢。一位同事遇到了同样的问题。原来,他用来上传脚本到服务器的图形化 FTP 客户端仍然掌握着文件。关闭 FTP 连接后,我就可以运行脚本了。【参考方案2】:

发生这种情况是因为脚本文件已打开以供写入,可能是由尚未终止的流氓进程打开的。

解决办法:检查什么进程还在访问该文件,并终止它。

例如:

# /root/wordpress_plugin_updater/updater.pl --wp-path=/var/www/virtual/joel.co.in/drjoel.in/htdocs
-bash: /root/wordpress_plugin_updater/updater.pl: /root/perl/bin/perl: bad interpreter: Text file busy

在脚本名称上运行lsof(列出打开的文件命令):

# lsof | grep updater.pl
sftp-serv 4416            root    3r      REG            144,103    11043   33046751 /root/wordpress_plugin_updater/updater.pl

通过 PID 杀死进程:

kill -9 4416

现在尝试再次运行脚本。现在可以使用了。

# /root/wordpress_plugin_updater/updater.pl --wp-path=/www/htdocs
Wordpress Plugin Updater script v3.0.1.0.
Processing 24 plugins from

【讨论】:

【参考方案3】:

这总是与 perl 解释器 (/usr/bin/perl) 无法访问有关。事实上,它发生在 shell 脚本运行或 awk 或 #!脚本顶部的行。

原因可能有很多... perms、锁定文件、文件系统脱机等等。

这显然取决于问题发生时您运行它的确切时间。但我希望答案是您想要的。

【讨论】:

“文本文件忙”的错误信息是有特定含义的,不会是由您提到的任何问题引起的。 @duskwuff,想详细说明一下吗?你能和我们分享你的智慧吗? (顺便说一句,我的研究准确地说明了我所分享的内容)。 @duskwuff 的具体含义是正是这个答案所描述的。自己尝试一下——打开 /usr/bin/perl 进行追加,然后尝试运行 perl 脚本。是的,“文本文件”有点误导,但这就是几十年来一直标准化的错误。【参考方案4】:

如果脚本是在 Windows 或任何其他具有不同“本机”行尾的操作系统中编辑的,则它可以像第一行末尾的 CR(^M)“隐藏”一样简单。改进的 Vi 可以设置为 隐藏 这个非本地行结尾。在我的例子中,我只是在 VI 中重新输入了有问题的第一行,错误就消失了。

【讨论】:

【参考方案5】:

如果您正在使用 gnu 并行并看到此错误,则可能是因为您从写入文件的同一位置流式传输文件...

【讨论】:

这就是我的情况。【参考方案6】:

我遇到了同样的问题,并且 grepping 以查看使用该文件的内容不起作用。原来我只需要重新启动 droplet,viola 脚本现在可以工作了。

【讨论】:

以上是关于/usr/bin/perl:错误的解释器:文本文件忙的主要内容,如果未能解决你的问题,请参考以下文章

问题解决: 解释器错误: 没有那个文件或目录

shell基础

shell编程语法

使我的文件以 Perl 或 HTML 可读

perl文本条件筛选

perl分割文件