2012-02-15 22 views
5

Estoy intentando ejecutar un script de shell con el comando nohup. El script de shell toma una matriz de archivos, ejecuta un programa python en cada archivo en un bucle y agrega el resultado a un archivo. Esto funciona bien en el servidor, pero si trato de usar el comando nohup no funciona. He ejecutado con éxito otros programas utilizando nohup en este servidor, pero no este script.script de shell que no funciona 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 

El programa funciona bien cuando lo ejecuto mientras permanece conectado al servidor, por ejemplo

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

Sin embargo, cuando intento ejecutarlo con el comando nohup,

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

si salgo del servidor y vuelvo, el archivo de salida (batch_results.dat) no tiene ningún dato.

Estoy seguro de que me falta algún arreglo o comando simple aquí. ¿Algunas ideas?

Edit: El programa fof.py produce dos archivos que se utilizan como entrada para mdisk5.py. Cuando salgo del servidor mientras ejecuto nohup, se producen estos dos archivos, pero solo para el primer archivo de entrada '0010.dat'. Los archivos de salida batch0.dat y batch_results.dat permanecen vacíos.

+0

sacar el '>/dev/null' para ver si se imprime alguna información útil? Además, ¿noh no pone ningún resultado en un archivo 'nohup.txt' o similar? Buena suerte. – shellter

+0

No puedo encontrar el archivo nohup.txt en el directorio de trabajo. ¿Esto va a un directorio predeterminado diferente? – ricitron

+0

la documentación de nohup que acabo de buscar dice que es dir actual o $ HOME. intente esto en la línea de comando 'man nohup' para ver los detalles de su sistema. Buena suerte. – shellter

Respuesta

1

Aquí es su problema:

#/bin/sh

sh no soporta matrices. O bien cambiar su línea tinglado para invocar un intérprete de órdenes que las matrices de apoyo, como bash, o utilizar un espacio en blanco separado cadena normal, de sus archivos de datos en una como

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