2012-02-15 30 views
5

Tôi đang cố gắng chạy tập lệnh shell với lệnh nohup. Kịch bản lệnh shell lấy một mảng các tệp, chạy chương trình python trên mỗi tệp trong một vòng lặp và nối đầu ra vào tệp. Điều này làm việc tốt trên máy chủ, nhưng nếu tôi cố gắng sử dụng lệnh nohup nó không hoạt động. Tôi đã chạy thành công các chương trình khác bằng nohup trên máy chủ này, không phải kịch bản này. chương trìnhtập lệnh shell không hoạt động với 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 

này hoạt động tốt khi tôi chạy nó trong khi duy trì kết nối đến máy chủ, ví dụ

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

Tuy nhiên, khi tôi cố gắng chạy nó với lệnh nohup,

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

nếu tôi thoát khỏi máy chủ và quay trở lại tập tin đầu ra (batch_results.dat) không có bất kỳ dữ liệu nào.

Tôi chắc chắn rằng tôi thiếu một số sửa chữa hoặc lệnh đơn giản tại đây. Bất kỳ ý tưởng?

Chỉnh sửa: Chương trình fof.py tạo hai tệp được sử dụng làm đầu vào cho mdisk5.py. Khi tôi thoát khỏi máy chủ trong khi chạy nohup, hai tệp này được tạo, nhưng chỉ cho tệp đầu vào đầu tiên '0010.dat'. Các tệp đầu ra batch0.dat và batch_results.dat vẫn trống.

+0

đưa ra các '>/dev/null' để xem nếu có bất kỳ thông tin hữu ích nào được in? Ngoài ra, không nohup đặt bất kỳ đầu ra vào một tập tin 'nohup.txt' hoặc tương tự? Chúc may mắn. – shellter

+0

Tôi không thể tìm thấy tệp nohup.txt trong thư mục làm việc. Điều này có đi đến một thư mục mặc định khác không? – ricitron

+0

tài liệu nohup Tôi chỉ googled nói rằng đó là một trong hai dir hiện tại hoặc $ HOME. hãy thử điều này trên dòng lệnh 'man nohup' để xem chi tiết cụ thể cho hệ thống của bạn. Chúc may mắn. – shellter

Trả lời

1

Dưới đây là vấn đề của bạn:

#/bin/sh

sh không hỗ trợ mảng. Hoặc thay đổi dòng công việc của bạn để gọi một vỏ mà không mảng hỗ trợ, như bash, hoặc sử dụng một khoảng trắng tách chuỗi bình thường của tập tin dữ liệu của bạn trong một như

DAT_FILES="0010.dat 0020.dat 0030.dat" 
    for file in $DAT_FILES 
    do 
     ... 
    done 
Các vấn đề liên quan