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

2019-01-22 17:57发布

This is a new one for me: What does this error indicate?

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

There were a couple of disk-intensive processes running at the time, but I've never seen that message before—in fact, this is the first time that I can remember getting an error when trying to run a Perl script. After a few seconds of waiting, I was able to run it, and haven't seen the issue since, but it would be nice to have an explanation for this.

Running Ubuntu 9.04, file system is ext3.

5条回答
Luminary・发光体
2楼-- · 2019-01-22 18:32

This always has to do with the perl interpreter (/usr/bin/perl) being inaccessible. In fact, it happens when a shell script is running or awk or whatever is on the #! line at the top of the script.

The cause can be many things ... perms, locked file, filesystem offline, and on and on.

It would obviously depend on what was happening at the exact moment you ran it when the problem occured. But I hope the answer is what you were looking for.

查看更多
贼婆χ
3楼-- · 2019-01-22 18:37

I'd guess you encountered this issue.

The Linux kernel will generate a bad interpreter: Text file busy error if your Perl script (or any other kind of script) is open for writing when you try to execute it.

You don't say what the disk-intensive processes were doing. Is it possible one of them had the script open for read+write access (even if it wasn't actually writing anything)?

查看更多
该账号已被封号
4楼-- · 2019-01-22 18:48

This happens because the script file is open for writing, possibly by a rogue process which has not terminated.

Solution: Check what process is still accessing the file, and terminate it.

Eg:

# /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

Run lsof (list open files command) on the script name:

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

Kill the process by its PID:

kill -9 4416

Now try running the script again. It works now.

# /root/wordpress_plugin_updater/updater.pl --wp-path=/www/htdocs
Wordpress Plugin Updater script v3.0.1.0.
Processing 24 plugins from
查看更多
迷人小祖宗
5楼-- · 2019-01-22 18:55

If the script was edited in Windows, or any other OS with different "native" line endings, it could be as simple as a CR(^M) "hiding" at the end of the first line. Vi improved can be set up to hide this non native line ending. In my case I simply re-typed the offending first line in VI and the error went away.

查看更多
家丑人穷心不美
6楼-- · 2019-01-22 18:57

If you are using gnu parallel and you see this error then it may be because you are streaming a file in from the same place that you are writing the file out...

查看更多
登录 后发表回答