关闭外壳时,`scp`传输是否关闭?


29

我已经scp转移(从一台远程服务器到另一台),这是很大的。

因此,也许我想关闭执行该命令的计算机,这将结束传输吗?我可以ssh使用Bitwise程序访问外壳。

Answers:


34

有许多解决方案。

背景和取消流程

  1. 将ssh终端打开到远程服务器。
  2. scp照常开始传输。
  3. 后台处理scp进程(Ctrl+ Z,然后输入命令bg。)
  4. 取消后台进程(disown)。
  5. 终止会话(exit),该过程将继续在远程计算机上运行。

这种方法的一个缺点是stdout和stderr的文件描述符仍将包含对ssh会话的tty的引用。因此,当您尝试退出时,终端可能会挂起。您可以通过键入~.强制关闭ssh客户端的方法来解决此问题(转义序列必须遵循新的一行...另请参见~?)。如果要放弃的进程写入stdout或stderr,则如果tty缓冲区溢出,则该进程可能会过早退出。

创建一个屏幕会话并分离它

GNU Screen可用于创建远程终端会话,注销会话后,该会话可以分离并继续在服务器上运行。然后,您可以稍后再登录到服务器并重新连接到会话。

  1. 通过ssh登录到远程服务器。
  2. 启动屏幕会话,screen -D -R <session_name>
  3. scp照常开始传输。
  4. 拆下屏幕会话使用Ctrl+ Ad
  5. 终止ssh会话(exit

要重新加入会话:

  1. 通过ssh登录到远程服务器。
  2. 重新连接到屏幕会话, screen -D -R <session_name>

运行没有挂断的命令

使用查看答案nohup

使用任务计划程序

如果这是您要自动化的周期性任务,则这是最佳解决方案。

使用crontabatbatch安排传输。


嗨,达米安(Damien),谢谢您提供各种各样的答案和格式。但是我想弄清楚为什么您指定-D -R标志开始screen。我阅读了手册页,但并没有帮助我理解: -D -R Attach here and now. ...
hello_there_andy

@hello_there_andy该手册阐明了-DR的作用。基本上,如果您已经在运行Screen会话,它将重新连接到该会话,而不是创建一个新会话(即使用户通过SSH登录到该会话,也会将其踢出,如果用户因挂起而挂起,这很有用。到不良的网络连接。)
DamienÓCeallaigh

1
请注意,指定会话名称是可选的。
DamienÓCeallaigh

好的,我认为我理解,但是我想我认为(可能是错误的)是这样screen -r <session>做的……所以与之-DR不同的是-r它可以将他们踢出去?如果有其他用户,不仅会重新连接并失败。
hello_there_andy

我做了一些测试以确定。-D做了-d的工作,除了除了分离任何现有的Screen会话外,它还将关闭SSH连接(注销用户)。-r重新附加会话。-R重新附加一个现有会话,但是如果一个会话不存在,它将创建一个新会话(如果没有要重新附加的会话,-r将失败。)因此,我在前面的描述中有点不准确。
DamienÓCeallaigh

10

您可以使用nohup(1),例如,执行以下操作:

nohup scp alice@source:/the/answer/of/all bob@target.example.com:/var/tmp/42 &

这将创建的输出nohup.out。然后,您可以安全地注销。


&我在最后作出的区别!谢谢!
winklerrr

6

是的,它将终止。该screen程序可以在不连接的情况下维持终端会话的存在,该程序是:

SCREEN(1)                                                            SCREEN(1)

NAME
       screen - screen manager with VT100/ANSI terminal emulation

SYNOPSIS
       screen [ -options ] [ cmd [ args ] ]
       screen -r [[pid.]tty[.host]]
       screen -r sessionowner/[[pid.]tty[.host]]

DESCRIPTION
       Screen is a full-screen window manager that multiplexes a physical ter‐
       minal between several processes (typically interactive  shells).   Each
       virtual terminal provides the functions of a DEC VT100 terminal and, in
       addition, several control functions from the ISO 6429  (ECMA  48,  ANSI
       X3.64)  and ISO 2022 standards (e.g. insert/delete line and support for
       multiple character sets).  There is a  scrollback  history  buffer  for
       each virtual terminal and a copy-and-paste mechanism that allows moving
       text regions between windows.

2

如上所述,您可以使用screen命令,例如:

  • 建立画面

user@server:~$ screen -S bigscptransfer

  • 您现在在屏幕上

ser@server:~$ scp bigfile.dat server2:.

  • 使用CTRL+ 从屏幕上分离,A然后按D

[detached from 5899.bigscptransfer]

  • 在需要时恢复会话:

user@server:~$ screen -r bigscptransfer


-1

nohup scp shinto @ source:/ home / data roose@target.example.com:/ var / tmp / file

暂时停止命令

Ctrl + z

将命令置于后台,键入:

您可以通过以下方式检查该过程:

工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.