shell 脚本不能与 nohup 一起使用

发布于 2025-01-05 17:57:18 字数 918 浏览 1 评论 0原文

我正在尝试使用 nohup 命令运行 shell 脚本。 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 保持为空。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彼岸花ソ最美的依靠 2025-01-12 17:57:18

这是你的问题:

#!/bin/sh

sh 不支持数组。更改 shebang 行以调用支持数组的 shell,例如 bash,或者使用正常的、以空格分隔的数据文件字符串,例如

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

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文