问题描述
我想在运行此脚本的远程服务器上执行脚本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。