2009-09-05 19 views
25

Jest to dla mnie nowy: Co oznacza ten błąd?/usr/bin/perl: bad interpreter: Plik tekstowy zajęty

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

Było kilka procesów dyskowych intensywnie działających w tym czasie, ale nigdy nie widziałem tego komunikatu przed — w rzeczywistości jest to pierwszy raz, pamiętam otrzymuję błąd podczas próby uruchomienia skrypt Perla. Po kilku sekundach oczekiwania udało mi się go uruchomić i nie widziałem problemu od tego czasu, ale byłoby miło mieć wytłumaczenie tego.

Uruchamianie systemu Ubuntu 9.04, system plików ext3.

+0

Zobacz także SF: http: // serverfault.com/questions/21561/bad-interpreter-text-file-busy – Ether

Odpowiedz

18

Zgaduję, że napotkałeś this issue.

Jądro Linux wygeneruje błąd bad interpreter: Text file busy, jeśli skrypt Perl (lub jakikolwiek inny rodzaj skryptu) jest otwarty do zapisu przy próbie jego uruchomienia.

Nie mówisz, co robią procesy intensywnie wykorzystujące dyski. Czy to możliwe, że jeden z nich miał otwarty skrypt do odczytu i zapisu (nawet jeśli w rzeczywistości nic nie pisał)?

+0

To brzmi rozsądnie - pracowałem nad scenariuszem i stało się tak, jak go zapisałem, a następnie próbowałem go uruchomić. – chris

+3

Prawdopodobnie "proces intensywny na dysku" nie zrobił nic bezpośrednio w twoim skrypcie, ale utrzymywał dysk tak zajęty, że utknął podczas pisania skryptu i utrzymywał go przez kilka sekund. – hobbs

+0

Tak właśnie myślę - w każdym razie ma to sens. – chris

1

Jest to zawsze związane z niedostępnością interpretera perl (/ usr/bin/perl). W rzeczywistości zdarza się, gdy działa skrypt powłoki lub awk lub cokolwiek innego w #! linia u góry skryptu.

Przyczyną może być wiele rzeczy ... perms, zablokowany plik, system plików offline i włączony.

To oczywiście zależy od tego, co działo się dokładnie w momencie, kiedy go uruchomiłeś, gdy wystąpił problem. Ale mam nadzieję, że odpowiedź jest tym, czego szukaliście.

+1

Komunikat o błędzie "tekst zajęty" ma określone znaczenie i nie będzie powodowany przez żaden z wymienionych problemów. – duskwuff

+1

@duskwuff, czy chcesz opracować? Czy możesz podzielić się swoją mądrością z resztą z nas? (przy okazji, moje badania dokładnie mówią, czym się dzielę). – Rap

+0

@duskwuff konkretne znaczenie jest _exactly_ co opisuje ta odpowiedź. Spróbuj sam - otwórz/usr/bin/perl dla append i spróbuj uruchomić skrypt perla. Tak, "plik tekstowy" jest trochę mylący, ale taki właśnie błąd został ustandaryzowany jak na dziesięciolecia. –

0

Jeśli skrypt został edytowany w systemie Windows lub innym systemie operacyjnym z różnymi "natywnymi" zakończeniami linii, może to być tak proste, jak "ukrywanie" pod koniec pierwszego wiersza. Poprawione Vi można ustawić na ukryć to nieodłączne zakończenie linii. W moim przypadku po prostu ponownie wpisałem obrażającą pierwszą linię w VI i błąd zniknął.

2

Jeśli używasz gnu równolegle i widzisz ten błąd to może być dlatego, że są strumieniowego pliku w tym samym miejscu, że piszesz plik z ...

+0

Tak właśnie działo się w moim przypadku. – Kaunteya

2

Dzieje się tak, ponieważ plik skryptu jest otwarty do pisania, prawdopodobnie przez nieuczciwy proces, który się nie zakończył.

Rozwiązanie: Sprawdź, który proces wciąż uzyskuje dostęp do pliku i zakończ go.

Np

# /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 (lista otwartych plików poleceń) na nazwę skryptu:

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

zabić proces od jego PID:

kill -9 4416 

Teraz spróbuj uruchomić skrypt ponownie. Teraz działa.

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