2012-02-15 25 views
5

Próbuję uruchomić skrypt powłoki za pomocą polecenia nohup. Skrypt powłoki pobiera tablicę plików, uruchamia program python na każdym pliku w pętli i dołącza dane wyjściowe do pliku. Działa to dobrze na serwerze, ale jeśli spróbuję użyć polecenia nohup, to nie działa. Udało mi się uruchomić inne programy, używając nohup na tym serwerze, po prostu nie ten skrypt.Skrypt powłoki nie działa z nohupem

#!/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 

Program działa poprawnie, gdy uruchomię go pozostając podłączona do serwera, na przykład

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

Jednak, gdy próbuję uruchomić go za pomocą polecenia nohup,

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

, jeśli wyjdę z serwera i wrócę, plik wyjściowy (batch_results.dat) nie ma żadnych danych.

Jestem pewna, że ​​brakuje mi tutaj prostej poprawki lub polecenia. Jakieś pomysły?

Edytuj: Program fof.py produkuje dwa pliki, które są używane jako dane wejściowe dla pliku mdisk5.py. Kiedy wychodzę z serwera podczas pracy nohup, te dwa pliki są produkowane, ale tylko dla pierwszego pliku wejściowego "0010.dat". Pliki wyjściowe batch0.dat i batch_results.dat pozostają puste.

+0

wyjąć '>/dev/null' zobaczyć czy drukowane są jakieś przydatne informacje? Ponadto, czy nohup nie umieszcza żadnych danych wyjściowych w pliku "nohup.txt" lub podobnym? Powodzenia. – shellter

+0

Nie mogę znaleźć pliku nohup.txt w katalogu roboczym. Czy to przechodzi do innego domyślnego katalogu? – ricitron

+0

Dokumentacja nohup, którą właśnie wypróbowałem, powiedziała, że ​​jest to albo aktualny katalog, albo $ HOME. spróbuj tego w wierszu poleceń 'man nohup', aby zobaczyć szczegóły dotyczące twojego systemu. Powodzenia. – shellter

Odpowiedz

1

Oto problem:

#!/Bin/sh

sh nie obsługuje macierze. Albo zmienić swoją linię shebang powołać powłoki, które wykonuje tablic wsparcia, jak bash lub użyj normalne, białe znaki oddzielone ciąg plików danych w podobny

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