在 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 任务没有完成。
在 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 任务没有完成。