2009-09-05 5 views
25

Questo è uno nuovo per me: cosa indica questo errore?/usr/bin/perl: interprete non valido: file di testo occupato

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

C'erano un paio di processi ad alta intensità di disco in esecuzione al momento, ma non ho mai visto quel messaggio prima — in realtà, questa è la prima volta che mi ricordo ottenere un errore quando si cerca di correre uno script Perl. Dopo alcuni secondi di attesa, sono stato in grado di eseguirlo, e da allora non ho visto il problema, ma sarebbe bello avere una spiegazione per questo.

Esecuzione di Ubuntu 9.04, il file system è ext3.

+0

Vedere anche SF: http: // serverfault.it/questions/21561/bad-interpreter-text-file-busy – Ether

risposta

18

Suppongo che abbia incontrato this issue.

Il kernel Linux genera un errore bad interpreter: Text file busy se lo script Perl (o qualsiasi altro tipo di script) è aperto per la scrittura quando si tenta di eseguirlo.

Non si dice cosa stessero facendo i processi a uso intensivo del disco. È possibile che uno di essi abbia aperto lo script per l'accesso in lettura + scrittura (anche se non stava effettivamente scrivendo nulla)?

+0

Sembra ragionevole: stavo lavorando alla sceneggiatura, e questo è successo proprio mentre lo salvavo e poi ho provato a farlo funzionare. – chris

+3

Probabilmente il "processo intensivo del disco" non ha fatto nulla per il tuo script direttamente, ma ha mantenuto il disco abbastanza occupato da essere in stallo mentre scriveva lo script e lo teneva aperto per diversi secondi. – hobbs

+0

Questo è quello che sto pensando - sembra avere senso in ogni caso. – chris

1

Questo ha sempre a che fare con l'interprete perl (/ usr/bin/perl) che è inaccessibile. In effetti, succede quando uno script di shell è in esecuzione o awk o qualunque cosa si trovi sul #! linea nella parte superiore dello script.

La causa può essere molte cose ... permanenti, file bloccato, file system offline e così via.

Dipenderà ovviamente da ciò che stava accadendo nel momento esatto in cui è stato eseguito quando si è verificato il problema. Ma spero che la risposta sia ciò che stavi cercando.

+1

Il messaggio di errore "file di testo occupato" ha un significato specifico e non è causato da nessuno dei problemi menzionati. – duskwuff

+1

@duskwuff, cura di elaborare? Puoi condividere la tua saggezza con il resto di noi? (A proposito, la mia ricerca dice esattamente cosa stavo condividendo). – Rap

+0

@duskwuff il significato specifico è _esattamente_ ciò che descrive questa risposta. Provalo tu stesso - apri/usr/bin/perl per append e prova ad eseguire uno script perl. Sì, "file di testo" è un po 'fuorviante, ma questo è l'errore standardizzato da decenni. –

0

Se lo script è stato modificato in Windows o in qualsiasi altro sistema operativo con terminazioni di linea "native" diverse, potrebbe essere semplice come un "nascondiglio" CR(^M) alla fine della prima riga. Vi migliorato può essere impostato su nascondere questa fine di linea non nativo. Nel mio caso ho semplicemente ridigitato la prima riga in VI e l'errore è andato via.

2

Se si utilizza GNU parallelo e si vede questo errore allora può essere perché si sta lo streaming di un file dallo stesso luogo che si sta scrivendo il file fuori ...

+0

Questo è ciò che stava accadendo nel mio caso. – Kaunteya

2

Ciò accade perché il file di script è aperto per la scrittura, forse da un processo canaglia che non è terminato.

Soluzione: verificare quale processo sta ancora accedendo al file e terminarlo.

Esempio:

# /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 (comando lista file aperti) sul nome dello script:

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

uccidere il processo per la sua PID:

kill -9 4416 

Ora provare a eseguire la sceneggiatura di nuovo. Ora funziona.

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