сценарий оболочки не работает с nohup - PullRequest
5 голосов
/ 15 февраля 2012

Я пытаюсь запустить скрипт оболочки с помощью команды nohup. Сценарий оболочки принимает массив файлов, запускает программу на python для каждого файла в цикле и добавляет вывод в файл. Это прекрасно работает на сервере, но если я пытаюсь использовать команду nohup, она не работает. Я успешно запустил другие программы, использующие 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

Программа работает нормально, когда я запускаю ее, оставаясь подключенным к серверу, например

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

Однако, когда я пытаюсь запустить его с помощью команды nohup,

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

если я выйду из сервера и вернусь, выходной файл (batch_results.dat) не содержит никаких данных.

Я уверен, что здесь отсутствует какое-то простое исправление или команда. Есть идеи?

Edit: Программа fof.py создает два файла, которые используются в качестве входных данных для mdisk5.py. Когда я выхожу из сервера во время работы nohup, эти два файла создаются, но только для первого входного файла '0010.dat'. Выходные файлы batch0.dat и batch_results.dat остаются пустыми.

1 Ответ

1 голос
/ 02 апреля 2012

Вот ваша проблема:

#! / Bin / sh

sh не поддерживает массивы.Либо измените строку shebang, чтобы вызывать оболочку, которая поддерживает массивы, например bash, либо используйте обычную строку файлов данных, разделенных пробелами, в виде

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