Linux 串行运行多个命令,并确保所有命令都运行
我想一个接一个地运行一系列unix命令。如果这些命令中的任何一个因任何原因而死亡,则后续命令应继续运行 例如,我有3个命令,分别称为“setup”、“long running job”和“teardown”。如果“长时间运行的作业”以任何退出代码结束,或者意外死亡,我想确保“拆卸”在任何情况下都能运行 简单地用分号连接所有命令似乎不起作用。我试着运行Linux 串行运行多个命令,并确保所有命令都运行,linux,shell,unix,Linux,Shell,Unix,我想一个接一个地运行一系列unix命令。如果这些命令中的任何一个因任何原因而死亡,则后续命令应继续运行 例如,我有3个命令,分别称为“setup”、“long running job”和“teardown”。如果“长时间运行的作业”以任何退出代码结束,或者意外死亡,我想确保“拆卸”在任何情况下都能运行 简单地用分号连接所有命令似乎不起作用。我试着运行touch test.txt;pinglocalhost;在macOS终端中的rm test.txt,在运行时关闭了终端选项卡,发现“test.te
touch test.txt;pinglocalhost;在macOS终端中的rm test.txt
,在运行时关闭了终端选项卡,发现“test.text”没有被删除。您尝试过吗?似乎是满足您需求的理想工具
$> parallel ::: setup long-running-job teardown
Parallel提供了大量选项来控制暂停、失败、跳转、重试等。有关示例,请参阅手册和教程 如果要确保即使交互式窗口关闭,命令仍能继续执行,并且所有命令都按指定的顺序依次执行,请使用此答案中的方法: 基本上是针对你问题中的命令行
nohup sh -c 'touch test.txt; ping localhost; rm test.txt'
这意味着通过关闭终端发送的挂起信号将被忽略。关闭终端与命令无法运行不同。如果你想在你不在的时候运行一些东西,你可以把它们放在后台。当然最好把它放在脚本中,但是你可能可以做
trap'rm test.txt'0;ping localhost
(假设bash:对于其他shell,您可能需要更具体地了解您想要捕获的信号)。嗯?OP特别希望命令连续运行。任何阅读@triplee comment的人都可能犯同样的错误。您需要查看手册,以确定哪些要手动运行,哪些要连续运行。你可以控制每项工作和你想要的并行度。如果你能编辑你的答案来澄清这一点,我将能够收回我的否决票。提前谢谢你,我也很抱歉这么做。如果光是这一点就足以提高阅读理解力的话,我会这么做的。