У меня есть scpпередача (с одного удаленного сервера на другой), это довольно большой.
Поэтому, может быть, я хочу закрыть компьютер, с которого я выполнил эту команду, закончится ли передача? У меня есть sshдоступ к оболочке с помощью программы Bitwise.
Завершите сеанс ( exit), и процесс продолжится на удаленной машине.
Одним из недостатков этого подхода является то, что файловые дескрипторы для stdout и stderr будут по-прежнему содержать ссылки на tty вашей сессии ssh. Терминал может зависнуть при попытке выйти из-за этого. Вы можете обойти это, набрав команду ~.принудительно закрыть ваш ssh-клиент (эта escape-последовательность должна следовать за новой строкой ... см. Также ~?). Если процесс, от которого вы отказываетесь, записывает данные в stdout или stderr, процесс может преждевременно завершиться, если переполнен буфер tty.
Создайте сеанс экрана и отсоедините его
Экран GNU можно использовать для создания сеанса удаленного терминала, который можно отсоединить и продолжить работу на сервере после выхода из сеанса. Затем вы можете снова войти на сервер и подключиться к сеансу.
Войдите на удаленный сервер через ssh.
Начать сеанс экрана screen -D -R <session_name>.
Начните scpперевод как обычно.
Отключите сеанс экрана с помощью Ctrl+ Aзатем d.
Завершить сеанс SSH ( exit)
Чтобы присоединить к сеансу:
Войдите на удаленный сервер через ssh.
Прикрепите к экрану сеанса, screen -D -R <session_name>
Привет Дэмиен, спасибо за хорошее разнообразие ответов и форматирования. Но я хотел немного прояснить, почему вы указали -D -Rстартовые флаги screen. Я прочитал справочную страницу, и это не помогло мне понять: -D -R Attach here and now. ...
hello_there_andy
@hello_there_andy В руководстве четко указано, что делает -DR. По сути, если у вас уже запущен сеанс Screen, он будет подключен к нему вместо создания нового сеанса (даже если пользователь вошел в него через SSH - он исключит их, что полезно, если пользователь зависает из-за к плохому сетевому соединению.)
Дэмиен Ó Киллай
1
Обратите внимание, что указывать имя сеанса необязательно.
Дэмиен Ó Силай
Хорошо, я думаю, что понимаю, но я думаю, я подумал (может быть, неправильно), что это screen -r <session>сделал ... так что -DRотличается от того, -rчто он может выгнать их? Не просто присоединить и потерпеть неудачу, если на нем есть другой пользователь.
hello_there_andy
Я сделал некоторое тестирование, чтобы быть уверенным. -D делает то же, что и -d, за исключением того, что он также закрывает соединение SSH (выход пользователя из системы) в дополнение к просто отключению любых существующих сеансов экрана. -r присоединяет сессию -R повторно присоединяет существующий сеанс, но создаст новый сеанс, если он не существует (-r потерпит неудачу, если не будет сеанса для повторного присоединения.) Итак, я был немного неточным в моем предыдущем описании.
Дэмиен Ó Силай
10
Вы можете использовать nohup(1), то есть сделать что-то вроде:
В &конце концов, это изменило меня! Благодарность!
winklerrr
6
Да, это будет прекращено. Решением для поддержания терминальной сессии без подключения является screenпрограмма:
SCREEN(1) SCREEN(1)
NAME
screen - screen manager with VT100/ANSI terminal emulation
SYNOPSIS
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]
DESCRIPTION
Screen is a full-screen window manager that multiplexes a physical ter‐
minal between several processes (typically interactive shells). Each
virtual terminal provides the functions of a DEC VT100 terminal and, in
addition, several control functions from the ISO 6429 (ECMA 48, ANSI
X3.64) and ISO 2022 standards (e.g. insert/delete line and support for
multiple character sets). There is a scrollback history buffer for
each virtual terminal and a copy-and-paste mechanism that allows moving
text regions between windows.
-D -R
стартовые флагиscreen
. Я прочитал справочную страницу, и это не помогло мне понять:-D -R Attach here and now. ...
screen -r <session>
сделал ... так что-DR
отличается от того,-r
что он может выгнать их? Не просто присоединить и потерпеть неудачу, если на нем есть другой пользователь.Вы можете использовать
nohup(1)
, то есть сделать что-то вроде:Это создаст вывод
nohup.out
. Тогда вы можете безопасно выйти из системы.источник
&
конце концов, это изменило меня! Благодарность!Да, это будет прекращено. Решением для поддержания терминальной сессии без подключения является
screen
программа:источник
Как сказано выше, вы можете использовать экранную команду, например:
user@server:~$ screen -S bigscptransfer
ser@server:~$ scp bigfile.dat server2:.
[detached from 5899.bigscptransfer]
user@server:~$ screen -r bigscptransfer
источник
nohup scp shinto @ source: / home / data roose@target.example.com: / var / tmp / file
временно остановить команду с
поставьте в фоновом режиме команду, наберите:
Вы можете проверить процесс с помощью:
источник