nohup下shell脚本无法执行
我正在尝试用nohup命令运行一个shell脚本。这个脚本会处理一组文件,在一个循环中对每个文件运行一个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)里没有任何数据。
我确定我在这里漏掉了一些简单的解决办法或命令。有什么想法吗?
编辑:这个程序fof.py会生成两个文件,作为mdisk5.py的输入。当我在运行nohup时退出服务器,这两个文件会生成,但只针对第一个输入文件'0010.dat'。输出文件batch0.dat和batch_results.dat却是空的。
1 个回答
1
这是你的问题:
#!/bin/sh
sh
这个命令不支持数组。如果你想使用数组,可以把开头那一行改成调用一个支持数组的命令,比如 bash
。或者,你也可以用普通的、用空格分开的字符串来表示你的数据文件,像这样:
DAT_FILES="0010.dat 0020.dat 0030.dat"
for file in $DAT_FILES
do
...
done