如果我在执行命令后关闭连接,那么执行可能需要数小时的查询是否会继续在远程服务器上执行?


4

如果我通过ssh连接到远程数据库服务器,启动mysql客户端并执行一个可能需要几个小时才能执行的查询,然后关闭连接,查询是否会继续执行直到完成?我可以在一个巨大的数据库上以这种方式mysqldump,几天后回去并期望它完成吗?

谢谢!

Answers:


4

简单地说:不 - 除非你采取特殊措施,否则当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服务器。


屏幕真棒:)
加拿大卢克2014年

0

关闭SSH连接将结束在该会话中启动的所有进程。

看看screen命令,让你在shell中启动一个会话,然后从另一个本地或远程shell重新连接到它。

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.