在后台运行远程 ssh 命令但仍显示的最佳方法是什么?

在后台运行远程 ssh 命令但仍显示的最佳方法是什么?

我需要远程运行 SSH 命令,并在本地显示输出。但如果连接中断,我希望命令仍能运行。

我并不是在谈论登录和执行,而是执行 ssh user@remotehost 'commands && command etc'

如何确保即使连接中断命令仍能运行?

答案1

最好的方法是使用屏幕,即使连接中断,它也会以持久的方式保持会话打开(如果您想再次开始使用它,您可以执行 ascreen -r并且它会再次打开它)。

在您想要运行的任何命令前面加上前缀screen(例如ssh -t user@host screen command)都应该可以完成这项工作。

如果您希望它在 shell 的后台运行,您也可以将一个附加&到整个内容。

答案2

您是否希望拥有一个可以恢复的持久会话,或者只是为了阻止断开连接并终止执行?

对于前者,使用screen,对于后者,使用nohup

答案3

如前所述,screen它可以完成所有任务。但不仅仅是你需要的。多年来我一直使用屏幕,现在每次登录系统时都会使用它。尝试使用以下配置进行安装screen和创建:~/.screenrc

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1`  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "

然后运行screen -Rd vcf。这是对 screen 的首选调用。您将重新连接到之前创建的名为 vcf* 的会话(如果有歧义则会发出警告),或者,如果会话尚未打开,则会创建该会话。CTRL+A是一个可以做所有事情的元键。CTRL+A CCTRL+ A,然后C)在会话内创建新窗口(screen)。CTRL+A SPACE将焦点移到下一轮窗口。CTRL+A D分离当前会话,使所有窗口在连接之间保持正常功能。如果您启动了一些很长的任务,您可以与 screen 分离,稍后再重新连接,看看会发生什么。如果您的 ssh 会话丢失,也会发生同样的情况 - screen 保持活动状态,所有打开的窗口和所有启动的任务都会启动。

如果您想关闭屏幕内的某个窗口 - 只需exit从其中的 shell 中关闭即可。如果您想关闭所有窗口中的所有 shell/任务并退出屏幕 - 只需按CTRL+A CTRL+\并在询问时按“Y”。

其余内容请参见手册屏幕。

答案4

我通常会这样做:

nohup mycommand &

tail -f nohup.out

相关内容