Подтвердить что ты не робот

/usr/bin/perl: плохой интерпретатор: текстовый файл занят

Это для меня новое: что указывает эта ошибка?

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

В то время было несколько процессов с интенсивным использованием жестких дисков, но я никогда не видел этого сообщения до — на самом деле, это первый случай, когда я могу вспомнить, что при попытке запустить Perl script. После нескольких секунд ожидания я смог запустить его и с тех пор не видел проблемы, но было бы неплохо объяснить это.

Запуск Ubuntu 9.04, файловая система - ext3.

4b9b3361

Ответ 1

Я бы предположил, что вы столкнулись с этой проблемой.

Ядро Linux генерирует ошибку bad interpreter: Text file busy, если ваш Perl script (или любой другой тип script) открыт для записи при попытке выполнить его.

Вы не говорите, что делали процессы с интенсивным использованием диска. Возможно ли, что у одного из них был доступ к script для чтения + записи (даже если он вообще ничего не писал)?

Ответ 2

Если вы используете gnu parallel и видите эту ошибку, возможно, это связано с тем, что вы передаете файл из того же места, в котором вы пишете файл...

Ответ 3

Это происходит потому, что файл script открыт для записи, возможно, с помощью процесса изгоев, который не был завершен.

Решение. Проверьте, какой процесс по-прежнему обращается к файлу, и завершите его.

Например:

# /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 (команда списка открытых файлов) в имени script:

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

Убейте процесс PID:

kill -9 4416

Теперь попробуйте запустить script снова. Теперь он работает.

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

Ответ 4

Это всегда связано с недоступностью интерпретатора perl (/usr/bin/perl). На самом деле, это происходит, когда работает оболочка script или awk или что-то еще на #! строка в верхней части script.

Причиной может быть много вещей... perms, заблокированный файл, файловая система в автономном режиме и вкл. и далее.

Это, очевидно, будет зависеть от того, что происходило в тот момент, когда вы его запускали, когда возникла проблема. Но я надеюсь, что ответ - это то, что вы искали.

Ответ 5

Если script был отредактирован в Windows или любой другой ОС с разными "родными" окончаниями строк, это может быть так же просто, как CR(^M) "скрывать" в конце первой строки. Vi может быть настроен, чтобы скрыть эту не-родную строку. В моем случае я просто перепечатал оскорбительную первую строку в VI, и ошибка исчезла.