nohup 多个连续命令

nohup 多个连续命令

我需要nohup两个命令,一个接一个。第二个命令必须在第一个命令之后执行。命令如下:

tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz

我需要在后台运行这两个命令,但显然不能同时运行这两个命令。第二个命令必须在第一个命令完成后运行。我试过这个:

nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

但命令不在后台运行。bash 提示符会等到两个命令完成后再给我另一个提示符。我需要它们在后台运行。

如果我做:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &

它完美地在后台运行。只有当我尝试执行多个命令时才会出现这种情况。

我也尝试过:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

但那也没用。语法无效之类的。我确信有办法做到这一点,但我不确定语法。

我能想到的唯一替代方法是将命令放入文件中.sh并对该文件执行 nohup 操作,但这不一定是我可以在我必须实现此功能的 Linux 系统上执行的操作(权限限制等)。

答案1

最简单的解决方案:使用以下命令创建一个 shell 脚本

 #/bin/sh
 tar -zcf archive.tar.gz.tmp mydir
 mv archive.tar.gz.tmp archive.tar.gz

并使用nohup myscript。可能在脚本中附带一些额外的文档。

(是的,我非常注重文档。特别是在与多人合作时,或者当你有一天可能会辞职而你的继任者需要弄清楚原因时。”)


另一种方法可能是为子任务启动一个新的 shell(在本例中是 tar 和 move)

nohup `$(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz)


方案 2:

nohup ```tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz```。

不过我还是更喜欢这个剧本。几年后你或其他人看到这个剧本时,可能会想知道为什么会这样写,里面的注释可能会很有用。

无关的说明:我到底该如何发布带有反引号的答案?(shell 的命令是“使用此命令;将输出作为输入提供给另一个命令”)。

答案2

我认为你需要括号。

nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &

答案3

也许是防撞包装?

nohup bash -c 'tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1' &

答案4

您可以使用screen以下命令退出屏幕会话:

screen
tar -zcf archive.tar.gz.tmp mydir && mv archive.tar.gz.tmp archive.tar.gz
ctrl-a d to detach

该命令将像 nohup 一样运行。

相关内容