在 Bamboo 中通过 SSH 的 nohup 命令不会退出

A nohup command over SSH in Bamboo doesn't exit

在 Bamboo 服务器中,可以设置部署计划并使用 "SSH Task" 执行命令。我有一个启动 java 进程的任务。我写了以下命令来启动它,离开它 运行 并从远程服务器退出:

nohup java -jar project.jar 2>&1 1>/dev/null &

使用此命令,SSH 任务永远不会关闭,部署会记录 Java 进程输出,直到我登录到远程服务器并终止进程。所以我查看了一个有效的旧部署计划并更改为:

nohup java -jar project.jar </dev/null>/tmp/project.log 2>&1 &

该进程留在服务器上 运行,并且任务按预期关闭。 谁能解释为什么第一个命令不放手,就像第二个一样?

重定向的顺序很重要!具体来说,2>&1 表示 "Send standard error to where standard output is currently going"。在你的例子中:

... 2>&1 1>/dev/null ...

表示 "send stderr to the current stdout (i.e. the ssh session), and then redirect stdout to /dev/null" - 所以它让 stderr 指向 ssh 会话。

在工作示例中:

... >/tmp/project.log 2>&1 ...

表示 "send stdout to a file, and then send stderr to where stdout is pointing" - 所以最终都转到文件。

工作示例也是如此

</dev/null

确保标准输入不再连接到 SSH 会话;你的第一个例子没有这样做。

总而言之,非工作示例使 stdin 和 stderr 都连接到 SSH 会话;这通常可以解释为什么 ssh 任务没有完成。