Answers:
简单地说:不 - 除非你采取特殊措施,否则当ssh
远程启动的shell 退出时,服务器上的任何长期命令都将终止。如果终止ssh
会话,或者即使TCP连接中断(丢失网络连接,切换wifi网络,休眠等),该shell也会退出。
但是,有几种方法可以实现这些“特殊措施”。从最简单到最复杂/涉及:
nohup - 只需在你的单行命令前加上nohup
。如果您可以假定命令将执行然后自行终止,则此方法有效。输出将发送到nohup.out
当前目录中的文件。例:
nohup sh -c "sleep 5; echo done" &
screen -screen
将设置一个虚拟终端窗口,当您的ssh
连接终止时,该窗口不会退出。您可以稍后重新连接到服务器,并查看正在运行的任何命令的状态并发出新命令。例:
% client: ssh server
# server: screen
# server[0]: mysql -e 'really long query'
<disconnect>
后来回来了:
% client: ssh server
# server: screen -RD # -RD says "reconnect to my previous screen, even it already attached"
# server[0]: <right where you left off in the previous screen>
有很多选项screen
,你可以在一个screen
会话中创建几个“终端” ,你可以在文件中广泛配置它~/.screenrc
。
mosh -ssh
无论网络连接如何,都可以维护会话。当您在wifi网络之间迁移,甚至休眠/唤醒您的计算机时,mosh
将重新连接到服务器。此外,它将提供无延迟的界面,因此当您键入命令时,您不会受到链接或服务器速度的影响。请注意,mosh用于ssh
建立初始连接并在远程端设置UDP服务器。
关闭SSH连接将结束在该会话中启动的所有进程。
看看screen
命令,让你在shell中启动一个会话,然后从另一个本地或远程shell重新连接到它。