/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:错误的解释器:文本文件忙的主要内容,如果未能解决你的问题,请参考以下文章