2012-02-15 1 views
5

J'essaie d'exécuter un script shell avec la commande nohup. Le script shell prend un tableau de fichiers, exécute un programme python sur chaque fichier dans une boucle et ajoute la sortie dans un fichier. Cela fonctionne très bien sur le serveur, mais si j'essaie d'utiliser la commande nohup cela ne fonctionne pas. J'ai couru avec succès d'autres programmes using nohup sur ce serveur, juste pas ce manuscrit.Le script shell ne fonctionne pas avec 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 

Le programme fonctionne très bien quand je le lance, tout en restant connecté au serveur, par exemple

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

Cependant, lorsque je tente de l'exécuter avec la commande nohup,

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

si je quitte le serveur et que je reviens le fichier de sortie (batch_results.dat) n'a aucune donnée.

Je suis sûr qu'il me manque un correctif simple ou une commande ici. Des idées?

Editer: Le programme fof.py produit deux fichiers qui sont utilisés en entrée pour mdisk5.py. Lorsque je quitte le serveur pendant l'exécution de nohup, ces deux fichiers sont produits, mais uniquement pour le premier fichier d'entrée '0010.dat'. Les fichiers de sortie batch0.dat et batch_results.dat restent vides.

+0

prendre le '>/dev/null' pour voir si des informations utiles sont imprimées? De plus, nohup ne met-il pas de sortie dans un fichier 'nohup.txt' ou similaire? Bonne chance. – shellter

+0

Je ne trouve pas le fichier nohup.txt dans le répertoire de travail. Est-ce que cela va dans un autre répertoire par défaut? – ricitron

+0

la documentation de nohup que je viens de googler a dit que c'est soit dir actuel ou $ HOME. essayez ceci sur la ligne de commande 'man nohup' pour voir les détails de votre système. Bonne chance. – shellter

Répondre

1

Voilà votre problème:

#/bin/sh

sh ne supporte pas les tableaux. Modifiez votre ligne de tralala pour appeler une coquille qui fait des réseaux de soutien, comme bash, ou utiliser une normale, chaîne séparée de les espaces de vos fichiers de données dans un comme

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