我有一个 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) &
会发生以下情况:
- shell 运行
$(...)
并返回字符串Start time ...
,然后 - 运行
nohup Start time ...
显然会失败,因为没有这样的命令Start
。
由于nohup
只能运行一个命令,因此这是一种常见的解决方法:
~ $ nohup sh -c "python test.py; python test.py" &
因此您运行sh
它nohup
然后执行您想要的命令。