it-swarm.com.ru

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

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

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

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

Работает Ubuntu 9.04, файловая система ext3. 

27
chris

Я предполагаю, что вы столкнулись с этим вопросом .

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

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

21
cjm

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

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

Например:

# /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
5
Joel G Mathew

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

2
OwenRackham

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

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

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

1
Rap

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

0
Linux User