Будет ли запрос, который может занять часы для выполнения, будет выполняться на удаленном сервере, если я закрою соединение после выполнения команды?

Если я подключусь к удаленному серверу базы данных через ssh, запустите клиент mysql и выполните запрос, который может занять несколько часов, а затем закройте соединение, будет ли запрос продолжать выполнять до завершения? Могу ли я mysqldump таким образом в огромной базе данных, вернитесь через несколько дней и ожидайте, что все это будет полным?

благодаря!

2 Solutions collect form web for “Будет ли запрос, который может занять часы для выполнения, будет выполняться на удаленном сервере, если я закрою соединение после выполнения команды?”

Проще говоря: нет – если вы не примете специальные меры, любые долговечные команды на сервере прекратятся, когда оболочка, которую ssh запускает удаленно, выйдет. Эта оболочка будет завершена, если вы прекратите сеанс ssh или даже если TCP-соединение будет нарушено (потеряет сетевое подключение, переключит Wi-Fi-сети, спящий режим и т. Д.).

Однако есть несколько вариантов для выполнения этих «специальных мер». От простейших до самых сложных / вовлеченных:

  • Nohup – просто добавьте команду one-line с nohup . Это работает, если вы можете предположить, что команда выполнит, а затем завершит сам. Вывод будет отправлен в файл nohup.out в текущем каталоге. Пример:

     nohup sh -c "sleep 5; echo done" & 
  • Экранный 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 которая будет поддерживать сеанс независимо от сетевого подключения. При переходе между Wi-Fi-сетями или даже спящем / пробуждении вашего компьютера mosh снова подключится к серверу. Кроме того, он обеспечит свободный интерфейс без задержки, так как вы вводите свои команды, на вас не будет влиять медленность ссылок или серверов. Обратите внимание, что mosh использует ssh для установления начального соединения и настройки UDP-сервера на удаленном конце.

Закрытие SSH-соединения завершит любые процессы, запущенные в этом сеансе.

Взгляните на screen команду, которая позволит вам начать сеанс внутри оболочки, а затем снова подключиться к ней из другой локальной или удаленной оболочки.

  • SSH: выполнить команду sudo
  • Запустите консольную программу Windows с Mac
  • Странное поведение NS в OS X - невозможно подключиться к SSH-серверу
  • Проблемы с OS X Terminal UTF-8
  • Как я могу выйти из открытой, удаленной сессии SSH?
  • Ssh зависает при попытке подключения к некоторым хостам
  • Как я могу использовать SSH с прокси-сервером SOCKS 5?
  • Как создать соединение ssh Terminal ярлык на Mac OS X 10.6.8 (Snow Leopard)?
  • Передача портов туннелирования ssh
  • Доступен ли мой NAS из Интернета?
  • Может ли gedit на mac использоваться для редактирования файлов по ssh?
  • Давайте будем гением компьютера.