我有scp
传输(从一台远程服务器到另一台),这是相当大的。
那么也许我想关闭执行此命令的计算机,这会结束传输吗?我可以ssh
使用 Bitwise 程序访问 shell。
答案1
有多种解决方案。
背景和否认过程
- 打开远程服务器的 ssh 终端。
- 像往常一样开始
scp
传输。 - 将 scp 进程置于后台(Ctrl+ Z,然后是命令
bg
。) - 否认后台进程 (
disown
)。 - 终止会话 (
exit
),进程将继续在远程计算机上运行。
这种方法的一个缺点是 stdout 和 stderr 的文件描述符仍将包含对 ssh 会话的 tty 的引用。因此,当您尝试退出时,终端可能会挂起。您可以通过键入强制关闭 ssh 客户端来解决此问题~.
(转义序列必须遵循新行...另请参阅~?
)。如果您要放弃的进程写入 stdout 或 stderr,则当 tty 缓冲区溢出时,该进程可能会提前退出。
创建屏幕会话并将其分离
GNU 屏幕可用于创建远程终端会话,该会话可以在您注销会话后分离并继续在服务器上运行。然后,您可以稍后重新登录服务器并重新连接到会话。
- 通过 ssh 登录远程服务器。
- 启动屏幕会话,
screen -D -R <session_name>
。 - 像往常一样开始
scp
传输。 - Ctrl使用+A然后分离屏幕会话d。
- 终止 ssh 会话 (
exit
)
要重新连接到会话:
- 通过 ssh 登录远程服务器。
- 重新连接到屏幕会话,
screen -D -R <session_name>
运行命令而不挂断
使用查看答案nohup
。
使用任务计划程序
如果这是您想要自动化的周期性任务,那么这是最佳解决方案。
答案2
你可以使用nohup(1)
,即,执行以下操作:
nohup scp alice@source:/the/answer/of/all [email protected]:/var/tmp/42 &
这将创建 的输出nohup.out
。然后您就可以安全注销了。
答案3
是的,它将被终止。在没有连接的情况下保持终端会话活动的解决方案是以下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.
答案4
nohup scp shinto@source:/home/data[电子邮件受保护]:/var/tmp/文件
暂时停止命令
CTRL+z
将命令置于后台,输入:
背景
您可以通过以下方式检查该过程:
工作