代码之家  ›  专栏  ›  技术社区  ›  chris

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

  •  28
  • chris  · 技术社区  · 15 年前

    这是我的一个新错误:这个错误表示什么?

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

    当时有几个磁盘密集型的进程在运行,但我以前从来没有看到过这个消息。事实上,这是我第一次记得在运行Perl脚本时出错。经过几秒钟的等待,我能够运行它,从那以后就没有看到这个问题了,但是对此有一个解释是很好的。

    运行Ubuntu9.04,文件系统是ext3。

    5 回复  |  直到 10 年前
        1
  •  21
  •   kasperd    10 年前

    我想你遇到过 this issue .

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

    您不知道磁盘密集型进程在做什么。是否有可能其中一个脚本是为读写访问而打开的(即使它实际上没有写任何东西)?

        2
  •  5
  •   Joel G Mathew    11 年前

    发生这种情况是因为脚本文件已打开进行写入,可能是由一个尚未终止的恶意进程造成的。

    解决方案:检查哪个进程仍在访问该文件,然后终止它。

    如:

    # /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 (list open files命令)在脚本名上:

    # 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
  •  2
  •   OwenRackham    12 年前

    如果您使用的是GNU Parallel,并且您看到了这个错误,那么可能是因为您正在从与您正在写文件的相同位置流式传输一个文件…

        4
  •  1
  •   Rap    15 年前

    这总是与Perl解释器(/usr/bin/perl)不可访问有关。事实上,当shell脚本正在运行或awk或上的任何内容时,就会发生这种情况!脚本顶部的行。

    原因可能有很多…perms、锁定文件、文件系统脱机,以及on和on。

    这显然取决于问题发生时运行它的确切时刻发生了什么。但我希望答案是你在寻找的。

        5
  •  0
  •   ЯegDwight kri    12 年前

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