2012-02-15 12 views
5

Sto cercando di eseguire uno script di shell con il comando nohup. Lo script di shell prende una serie di file, esegue un programma python su ogni file in un ciclo e aggiunge l'output a un file. Funziona bene sul server, ma se provo a usare il comando nohup non funziona. Ho eseguito con successo altri programmi utilizzando nohup su questo server, ma non questo script.script di shell non funziona con nohup

#!/bin/sh 
ARRAY=(0010.dat 0020.dat 0030.dat) 

rm batch_results.dat 
touch batch0.dat 
touch batch_results.dat 

for file in ${ARRAY[@]} 
do 
python fof.py $file > /dev/null 
python mdisk5.py > ./batch0.dat 
tail -1 batch0.dat 
tail -1 batch0.dat >> batch_results.dat 
done 

Il programma funziona bene quando l'eseguo restando sempre connessi al server, ad esempio

./batch.sh > /dev/null & 
./batch.sh > ./output.txt & 

Tuttavia, quando provo a farlo funzionare con il comando nohup,

nohup ./batch.sh > /dev/null & 

se esco dal server e ritorno il file di output (batch_results.dat) non ha alcun dato.

Sono sicuro che mi manca qualche semplice correzione o comando qui. Qualche idea?

Modifica: Il programma fof.py produce due file che vengono utilizzati come input per mdisk5.py. Quando esco dal server durante l'esecuzione di nohup, questi due file vengono prodotti, ma solo per il primo file di input '0010.dat'. I file di output batch0.dat e batch_results.dat rimangono vuoti.

+0

togliere la '>/dev/null' vedere se qualche informazione utile è stampata? Inoltre, non ha mai messo alcun output in un file 'nohup.txt' o simile? In bocca al lupo. – shellter

+0

Non riesco a trovare il file nohup.txt nella directory di lavoro. Questo va a una diversa directory predefinita? – ricitron

+0

la documentazione nohup che ho cercato su google mi ha detto che è o la directory corrente o $ HOME. prova questo nella riga di comando 'man nohup' per vedere le specifiche del tuo sistema. In bocca al lupo. – shellter

risposta

1

Ecco il problema:!

#!/Bin/sh

sh non supporta gli array. O cambiare la vostra shebang di invocare una shell che fa le matrici di supporto, come bash, o utilizzare uno spazio bianco separato stringa normale, i file di dati in un simile

DAT_FILES="0010.dat 0020.dat 0030.dat" 
    for file in $DAT_FILES 
    do 
     ... 
    done