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


15

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

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

即使连接断开,如何确保命令运行?

Answers:


27

最好的方法是使用屏幕,即使连接断开,该屏幕也可以使会话以持久的方式保持打开状态(如果您想再次开始使用它,则可以执行一次操作screen -r,它将再次打开它)。

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

如果您希望它在Shell的后台运行,则还&可以在整个内容后面附加一个。


您可能需要使用ssh -t分配一个终端以运行命令。否则,错误是“必须连接到终端”。
bonsaiviking 2012年

11

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

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


7

如前所述,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。那是首选的屏幕调用。您将重新连接到名称为vcf *的先前创建的会话(如果模棱两可,则被警告),或者,如果尚未打开会话,则将创建该会话。CTRL+ A是执行所有操作的meta键。CTRL+A CCTRL+ A,然后C)在会话内部创建新窗口(屏幕)。CTRL+A SPACE将焦点移至下一轮。CTRL+A D分离当前会话,以保持连接之间所有窗口的功能。如果您启动了一些looooong任务,则可以从屏幕上拆下并稍后再附加到它上,以查看发生了什么。如果您的ssh会话丢失,也会发生相同的情况-屏幕保持打开状态,所有打开的窗口和所有任务启动。

如果要关闭屏幕内的某些窗口-仅从其中exit的外壳中即可。如果要关闭所有窗口中的所有外壳程序/任务并退出屏幕-只需按CTRL+A CTRL+\,然后在询问时按“ Y”即可。

对于其他所有内容,请参见man屏幕。



1

我通常会这样做:

nohup mycommand &

tail -f nohup.out
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.