Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

shell script not working with nohup

I am trying to run a shell script with the nohup command. The shell script takes an array of files, runs a python program on each file in a loop, and appends the output to a file. This works fine on the server, but if I try to use the nohup command it does not work. I have successfully run other programs using nohup on this server, just not this script.

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

The program works fine when I run it while staying connected to the server, for example

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

However, when I try to run it with the nohup command,

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

if I exit the server and come back the output file (batch_results.dat) does not have any data.

I am sure I am missing some simple fix or command in here. Any ideas?

Edit: The program fof.py produces two files that are used as input for mdisk5.py. When I exit the server while running nohup, these two files are produced, but only for the first input file '0010.dat'. The output files batch0.dat and batch_results.dat remain empty.

like image 913
ricitron Avatar asked Nov 13 '22 10:11

ricitron


1 Answers

Here's your problem:

#!/bin/sh

sh does not support arrays. Either change your shebang line to invoke a shell that does support arrays, like bash, or use a normal, whitespace separated string of your data files in a like

   DAT_FILES="0010.dat 0020.dat 0030.dat"
   for file in $DAT_FILES
   do
       ...
   done
like image 64
rosvall Avatar answered Dec 27 '22 00:12

rosvall