在后台运行多个 nohup 命令

在后台运行多个 nohup 命令

有两个命令cmd1和cmd2。在这两者中,cmd2 需要更长的时间才能完成。需要先运行cmd2,然后运行cmd1。

尝试通过以下方式运行它们:

bash$ (nohup ./cmd2>result2 &) && nohup ./cmd1>result1 &

或者

bash$ (nohup ./cmd2>result2 &) ; nohup ./cmd1>result1 &

但两次我都可以看到 cmd1 没有等待 cmd2 完成并且 result1 被填充。

当cmd1和cmd2都应该是nohup进程并在后台运行时,如何使cmd1在cmd2之后运行?

答案1

您同时制作了两者cmd1并并行运行。cmd2你说:“在后台启动cmd2并切断与它的任何关联。在后台启动 cmd1 并切断与其的任何关联。”您的意思是:“在后台启动 cmd2;完成后,启动 cmd1(也在后台)。”由于不再与后台任务有任何关联,因此您需要设计一个先执行 cmd2,然后执行 cmd1 的后台任务。这是cmd2; cmd1(或者更确切地说,cmd2 && cmd1仅当 cmd2 成功时才运行 cmd1),您需要告诉nohup它启动一个在后台运行的 shell。

nohup sh -c './cmd2 >result2 && ./cmd1 >result1' &

答案2

如果您不介意不使用 nohup:

{ command1 >result1 2>&1 && command2 >result2 2>&1 ; } & disown

答案3

只需使用:

nohup ./cmd2>result2 & nohup ./cmd1>result1 & nohup ./cmd3>result3 &

答案4

让我们知道您到底在使用 cmd2 和 cmd1 做什么。这取决于任务类型和您想要的命令输出。如果您遇到使用命令按两次回车键的问题,那么可以通过我的这个来解决邮政

你也可以走这条路

nohup `cmd2 && ccmd1` > Output.out 2> Error.err < /dev/null & 

请参阅下面给出的屏幕截图,这里我使用了 3 个命令,并且所有命令都一一串行执行。我使用反引号来完成这项任务。在屏幕截图中,您还可以观察日期时间戳。 sleep 命令有 60 秒,因此 60 秒后我的下一个命令成功运行。我使用 jobs 命令来检查是否有任何命令仍在后台运行。这里没有。您可以看到的职位数为 1 。

nohup 多重命令

此屏幕截图可在此处找到关联另外,如果它不可见

相关内容