nohup 多个连续命令不记录输出

nohup 多个连续命令不记录输出

我有一个 Python 脚本(需要花费大量时间才能完成执行),我需要多次运行该脚本并改变参数。该脚本在远程机器上执行。为了举例和测试目的,请采用以下脚本test.py

import time

print("\nStart time: {}".format(time.ctime()))
time.sleep(10)
print("End time: {}".format(time.ctime()))

为此我通常使用nohup。使用以下命令执行一次即可正常工作:

nohup test.py &

输出已正确保存在nohup.out文件中。为了按顺序运行,我做了一些研究,发现了[这个问题][1],然后我想出了以下命令:

nohup $(python test.py; python test.py) &

运行正常。我运行命令,快速注销并再次登录,看到htop第一次执行正在运行,然后完成,然后第二次执行开始。但问题是输出没有保存到nohup.out文件中。如果我在终端中等待两次执行完成,则会显示以下错误:

nohup:无法运行命令‘开始’:没有此文件或目录

我在这里做错了什么?

附言: 我需要记录输出,因为我需要查看脚本的当前进度,并知道如果脚本没有正确完成,发生了哪些错误。因此,如果可以使用其他命令来代替nohup可以记录 pythonprint的命令,那么也会受到欢迎。

答案1

首先解决$(...),然后才解决nohup。即当您运行时,nohup $(python test.py; python test.py) &会发生以下情况:

  1. shell 运行$(...)并返回字符串Start time ...,然后
  2. 运行nohup Start time ...显然会失败,因为没有这样的命令Start

由于nohup只能运行一个命令,因此这是一种常见的解决方法:

~ $ nohup sh -c "python test.py; python test.py" &

因此您运行shnohup然后执行您想要的命令。

相关内容