nohup多个顺序命令不记录输出

时间:2018-11-01 21:42:28

标签: python logging remote-server 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:无法运行命令“开始”:没有这样的文件或目录

我在这里做什么错了?

PS。 我需要记录输出,因为我需要查看脚本的当前进度并知道如果未正确完成,则会发生哪个错误。因此,如果还有其他命令可以代替python nohup来使用print来记录python BEGIN; INSERT INTO table_a VALUES (record1) , (record2), (record3)………; INSERT INTO table_a VALUES (record91) , (record92), (record93)………; ….. …. COMMIT; ,那么也将受到欢迎。

2 个答案:

答案 0 :(得分:1)

您拥有的命令:

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

将尝试执行脚本的输出。可能不是您想要的。

这里您想要的是让nohup开始一个命令,该命令将依次执行这两个命令。可以做到这一点的最直接的程序是使用运行子外壳程序:

nohup bash -c "python one.py; python two.py" &

作为一种更好的方法,您可能需要调查tmux或屏幕。如果您在tmux /屏幕上启动命令,不仅可以将会话与当前正在运行的shell分离,还可以稍后重新连接到该会话以恢复程序并与之交互。

答案 1 :(得分:1)

nohup命令传递了该实用程序的实用程序和参数

如果您希望通过nohup依次运行脚本,也许可以使用bash作为实用程序

nohup bash -c "python ./test.py; python ./test.py"

但是,我建议使用python的logging包,因为我认为nohup是一种解决方法( nohup仅在标准输出是终端的情况下才追加到nohup.out 。)

此外,还有一种使用队列来顺序管理任务运行的方法。
在这里,您不必冗长地运行同一脚本两次。再说一遍,在您拥有的东西和写一个工作人员来消耗队列之间,我认为您拥有的东西更简单\\((ツ)_ /¯