我盲目地使用 nohup ssh 来发出远程 ssh 命令,而不用担心意外挂断。现在开始想了,不是很清楚。
我想知道的是,为什么只是执行“ssh remote sleep 100 &”几秒钟后就停止了工作?例如,
$ ssh remote sleep 100 &
[1] 13358
$
[1]+ Stopped ssh remote sleep 100
这个作业是什么原因停止的?你能解释一下这个作业控制的内部结构吗?
最佳答案
如果您希望远程命令在完成之前一直工作(并且不依赖于与远程主机的 ssh 连接):您可以使用
screen
(或tmux
)。- 使用 ssh 连接到远程主机
- 一旦连接:
screen
启动屏幕 session (一种“虚拟终端”,它将一直运行直到您关闭它,而不是依赖于您自己与它的连接) - 然后你可以从屏幕上分离(ctrl-a d)并稍后重新连接到它(从另一台机器等):再次ssh,“screen -l”列出屏幕,“screen -r”到重新连接到一个。在网上阅读有关屏幕的信息。
您的作业停止的原因与命令无关,而是与作业处理的内部有关。一些(好的)信息可以在 http://www.linusakesson.net/programming/tty/ 上找到(如果您没有阅读整篇文章,请搜索
background
。但请阅读整篇文章 ^^)。简而言之...从后台作业写入 TTY 将导致 SIGTTOU 暂停整个进程组
(也许您的 ssh 要求输入密码?或者它在连接时显示一些内容?)
与在远程主机上运行“nohup”相比,screen 的优势很多。主要的是,如果您尝试重新连接到 nohup 程序(例如:vi),则无法(轻松)完成……特别是如果它是多行的。但是当你重新连接到屏幕 session 时,你会看到(虚拟)终端,就好像你从未离开过它一样(即,如果命令在屏幕上添加了东西,它就会更新,并且它仍然有行/列等)。
您还可以在同一终端上与多个人一起工作(或者让其他人在一个人工作时“查看”)。
等等
关于linux - 关于 nohup ssh 的内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20651714/