当前位置: 首页>>技术教程>>正文


通过SSH运行nohup命令,然后断开连接

, , , ,

问题描述

我想在运行此脚本的远程服务器上执行脚本start.sh

nohup node server.js &

天真地,我这样称呼SSH:

ssh myserver <<EOF
./start.sh &
EOF

这将启动脚本,但会话连接。我想在脚本中使用其他命令执行此步骤,这样做并不好。

如何通过SSH连接到远程计算机,在后台启动nohup命令,然后断开连接?我想我可以把SSH进程本身放到后台,但这似乎不对。

最佳解决方案

你已经找到了正确的方法,这里是文件。

NOTE: you can put the ssh (client) into background by placing a & at the end, but you will not see the output. If you really want to do this, redirect the stdout/stderr to a file in case you need to check the response from the remote host.

基本上你可以用任何一种方式做到:

直接运行命令{,s}

ssh user@host "nohup command1 > /dev/null 2>&1 &; nohup command2; command3"

要么

ssh user@host "$(nohup command1 > /dev/null 2>&1 &) && nohup command2 >> /path/to/log 2>&1 &"

NOTE: && requires the first command to return 0 before executing the second

使用此处文件

ssh user@host << EOF
nohup command1 > /dev/null 2>&1 &
nohup command2 >> /path/to/command2.log 2>&1 &
......
EOF

以上3个选项应该适合您。

另外,请看一下这里的答案:https://askubuntu.com/a/348921/70270

次佳解决方案

为什么不只是tmux或屏幕并完成它?例如:

$ tmux new -s SessionNameHere
$ nohup /path/to/your/script.sh

如果它不断循环或需要一段时间才能完成,这是实用的。您可以断开与会话的连接,它将保持活动状态。

第三种解决方案

缩短形式:

ssh host "(command 1; command 2; ...) &>/dev/null &"

看来,bash本身会执行从终端的分离,所以不需要nohup。我运行Ubuntu 14.04 x86_64,bash 4.3.11。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2292.html,未经允许,请勿转载。