web-dev-qa-db-fra.com

/ usr/bin/Perl: interprète incorrect: fichier texte occupé

Ceci est un nouveau pour moi: Qu'est-ce que cette erreur indique?

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

À ce moment-là, quelques processus gourmands en ressources étaient en cours d'exécution, mais je n'avais jamais vu ce message auparavant. En fait, c'est la première fois que je me souviens avoir reçu une erreur en essayant d'exécuter un script Perl. Après quelques secondes d'attente, j'ai pu l'exécuter et je n'ai pas vu le problème depuis, mais il serait bien d'avoir une explication à ce sujet.

Sous Ubuntu 9.04, le système de fichiers est ext3.

27
chris

Je suppose que vous avez rencontré ce problème .

Le noyau Linux générera une erreur bad interpreter: Text file busy si votre script Perl (ou tout autre type de script) est ouvert en écriture lorsque vous essayez de l'exécuter.

Vous ne dites pas ce que faisaient les processus gourmands en disques. Est-il possible que l'un d'entre eux ait le script ouvert pour un accès en lecture + écriture (même s'il n'a pas écrit quoi que ce soit)?

21
cjm

Cela est dû au fait que le fichier de script est ouvert en écriture, éventuellement par un processus non fiable qui n’a pas pris fin.

Solution: Vérifiez quel processus accède toujours au fichier et terminez-le.

Par exemple:

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

Exécutez lsof (commande list open files) sur le nom du script:

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

Tuez le processus par son PID:

kill -9 4416

Maintenant, essayez à nouveau d'exécuter le script. Ça fonctionne maintenant.

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

Si vous utilisez gnu parallel et que vous voyez cette erreur, il se peut que vous diffusiez un fichier en continu à partir du même endroit où vous écrivez le fichier ...

2
OwenRackham

Cela a toujours à voir avec l'interpréteur Perl (/ usr/bin/Perl) inaccessible. En fait, cela se produit lorsqu'un script shell est en cours d'exécution ou awk ou quoi que ce soit qui est sur le #! ligne en haut du script.

La cause peut être liée à de nombreux facteurs: permanentes, fichiers verrouillés, système de fichiers hors connexion, etc.

Cela dépendrait évidemment de ce qui se passait au moment exact où vous l'avez exécuté lorsque le problème est survenu. Mais j'espère que la réponse est ce que vous cherchiez.

1
Rap

Si le script a été modifié dans Windows ou dans tout autre système d'exploitation avec des fins de ligne "natives" différentes, il pourrait s'agir simplement d'une CR(^M) "masquage" à la fin de la première ligne. Vi amélioré peut être configuré pour cacher cette fin de ligne non native. Dans mon cas, j'ai simplement retapé la première ligne incriminée dans VI et l'erreur a disparu.

0
Linux User