34 Stimmen

/usr/bin/perl: schlechter Interpreter: Textdatei beschäftigt

Das ist neu für mich: Was bedeutet dieser Fehler?

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

Zu diesem Zeitpunkt liefen zwar einige plattenintensive Prozesse, aber diese Meldung habe ich noch nie gesehen - es ist sogar das erste Mal, dass ich beim Versuch, ein Perl-Skript auszuführen, eine Fehlermeldung erhalte. Nach einigen Sekunden des Wartens konnte ich das Skript ausführen und seitdem ist das Problem nicht mehr aufgetreten, aber es wäre schön, eine Erklärung dafür zu haben.

Ich verwende Ubuntu 9.04, das Dateisystem ist ext3.

0 Stimmen

28voto

cjm Punkte 60581

Ich vermute, Sie sind auf dieses Thema .

Der Linux-Kernel erzeugt eine bad interpreter: Text file busy Fehler, wenn Ihr Perl-Skript (oder jede andere Art von Skript) zum Schreiben geöffnet ist, wenn Sie versuchen, es auszuführen.

Sie sagen nicht, was die plattenintensiven Prozesse gemacht haben. Ist es möglich, dass einer von ihnen das Skript für den Lese- und Schreibzugriff geöffnet hatte (auch wenn er eigentlich nichts geschrieben hat)?

0 Stimmen

Das klingt vernünftig - ich habe an dem Skript gearbeitet, und das passierte gerade, als ich es gespeichert und dann versucht habe, es auszuführen.

3 Stimmen

Wahrscheinlich hat der "plattenintensive Prozess" nichts direkt mit Ihrem Skript zu tun, aber er hat die Festplatte so beschäftigt, dass Ihr Skript beim Schreiben ins Stocken geriet und mehrere Sekunden lang offen blieb.

0 Stimmen

Das ist es, was ich denke - es scheint auf jeden Fall Sinn zu machen.

7voto

Joel G Mathew Punkte 6531

Dies geschieht, weil die Skriptdatei zum Schreiben geöffnet ist, möglicherweise durch einen bösartigen Prozess, der noch nicht beendet wurde.

Lösung: Überprüfen Sie, welcher Prozess noch auf die Datei zugreift, und beenden Sie ihn.

Beispiel:

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

ausführen. lsof (Befehl list open files) auf den Skriptnamen:

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

Beenden Sie den Prozess über seine PID:

kill -9 4416

Versuchen Sie nun, das Skript erneut auszuführen. Es funktioniert jetzt.

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

3voto

Linux User Punkte 21

Wenn das Skript unter Windows oder einem anderen Betriebssystem mit anderen "nativen" Zeilenenden bearbeitet wurde, könnte es so einfach sein wie ein CR(^M) "hiding" am Ende der ersten Zeile. Vi improved kann so eingestellt werden, dass ausblenden diese nicht muttersprachliche Zeilenendung. In meinem Fall habe ich einfach die fehlerhafte erste Zeile im VI neu eingegeben und der Fehler war weg.

2voto

Rap Punkte 6671

Das hat immer damit zu tun, dass der Perl-Interpreter (/usr/bin/perl) nicht zugänglich ist. Tatsächlich passiert es, wenn ein Shell-Skript läuft oder awk oder was auch immer in der #!-Zeile am Anfang des Skripts steht.

Die Ursache kann vieles sein ... Perms, gesperrte Datei, Dateisystem offline, und so weiter und so fort.

Es hängt natürlich davon ab, was genau zu dem Zeitpunkt geschah, als Sie das Programm starteten und das Problem auftrat. Ich hoffe aber, dass die Antwort das ist, wonach Sie gesucht haben.

1 Stimmen

Die Fehlermeldung "text file busy" hat eine bestimmte Bedeutung und kann nicht durch eines der von Ihnen genannten Probleme verursacht werden.

1 Stimmen

@duskwuff, können Sie das näher erläutern? Können Sie Ihre Weisheit mit dem Rest von uns teilen? (btw, meine Nachforschungen sagen genau das, was ich mitgeteilt habe).

2 Stimmen

@duskwuff die spezifische Bedeutung ist genau was diese Antwort beschreibt. Versuchen Sie es selbst - öffnen Sie /usr/bin/perl für append, und versuchen Sie, ein Perl-Skript auszuführen. Ja, "Textdatei" ist ein wenig irreführend, aber das ist es, was der Fehler seit Jahrzehnten standardisiert ist.

2voto

OwenRackham Punkte 21

Wenn Sie gnu parallel verwenden und dieser Fehler auftritt, dann kann es daran liegen, dass Sie eine Datei von der gleichen Stelle hereinstreamen, von der Sie die Datei herausschreiben...

0 Stimmen

So war es auch in meinem Fall.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X