ssh-关闭连接但继续远程执行

ssh-关闭连接但继续远程执行

假设我有一个really-long-running.sh(“非常长”,如“小时”)。

我希望让远程机器执行它(然后关闭本地机器)。

不幸的是,我对 ssh 没什么经验。它能达到我想要的效果吗?还是只是屏蔽了连接?

ssh user@host "bash -s " < really-long-running.sh &

更新

但事实并非如此。

那么我该如何做呢?

答案1

还有nohup工具。来自man nohup

nohup-运行不受挂断影响的命令,并将输出输出到非tty

你可以一步一步来:

  • ssh到远程主机
  • nohup /path/to/really-long-running.sh > /path/to/where-to-store-the-output &
  • 现在可以断开连接;

或者立即从本地机器执行:

ssh remote-host 'nohup /path/to/really-long-running.sh > /path/to/where-to-store-the-output &'

这些示例要求脚本可执行且驻留在远程主机上。在您的代码中,脚本可能不可执行,并且它是一个本地文件。

答案2

我建议您在执行端使用screentmux- 这使您可以随意断开连接并重新连接,让您可以选择在以后的某个时间读取脚本的输出。

答案3

那‘可能’会做你想做的事(之后再次 ssh 并使用 top 检查?)

然而,理想的方法是在屏幕会话(或 tmux)中启动该命令,然后你可以断开与正在运行的会话的连接,同时仍然可以查看它正在做什么

或者你可以使用 ssh 登录,然后通过后台操作从当前终端“断开”该进程,然后使用以下命令断开该进程

ctrl + z
bg
disown

或者,您可以通过在命令中添加 & 来从命令行将进程置于后台。但是,您仍然需要放弃它,以防止它在断开连接时死亡。

答案4

您可以at在远程机器上使用来安排您的工作。

$ ssh remote-host
$ at now + 5 min
at> really-long-running.sh
at> <Ctrl-D>
job 1 at 2016-10-12 09:10
$ exit

您的作业将按照您为 at 作业定义的时间表运行。查看手册页了解更多详情。默认配置允许任何用户使用。

相关内容