Bamboo中的SSH上的nohup命令不会退出

时间:2015-03-20 11:26:26

标签: bash ssh bamboo

在Bamboo服务器中,可以设置部署计划并使用" SSH任务"执行命令。我有一个启动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 &

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

1 个答案:

答案 0 :(得分:8)

重定向的顺序很重要!具体来说,2>&1表示&#34;将标准错误发送到标准输出当前的位置&#34;。在您的示例中:

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

表示&#34;将stderr发送到当前stdout(即ssh会话),然后将stdout重定向到/ dev / null&#34; - 所以它让stderr指向ssh会话。

在工作示例中:

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

表示&#34;将stdout发送到文件,然后将stderr发送到stdout指向的位置&#34; - 所以最终都会转到文件。

此外,工作示例

</dev/null

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

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