4

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

Спасибо!

2 ответа2

4

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

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

  • 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 которая будет поддерживать сеанс независимо от сетевого подключения. Когда вы переходите между Wi-Fi-сетями или даже переводите компьютер в спящий режим / пробуждаете его, mosh снова подключится к серверу. Кроме того, он обеспечит свободный интерфейс для работы, поэтому при вводе команд на вас не будет влиять медлительность соединения или сервера. Обратите внимание, что mosh использует ssh для установления начального соединения и настройки UDP-сервера на удаленном конце.

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .