Проще говоря: нет - если вы не примете особые меры, любые долгоживущие команды на сервере прекратят работу при удаленном завершении работы оболочки, запущенной 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-сервера на удаленном конце.