Intereting Posts
Проблема с конфигурацией сети с двумя сетевыми картами Не удается ssh, соединение немедленно завершается с состоянием выхода 254 есть способ получить URL из текущей вкладки в google-chrome? Как запустить два потока в сценарии оболочки bash? Как создать загрузочную Linux-установку USB из ISO в OS X? Gnome shell на debian использует много ресурсов У старого (ish) пакета есть зависимость QT3 – мой дистрибутив не несет его Изменение параметров sysctl для всех интерфейсов Редактирование / etc / hosts и / etc / sysconfig / network не изменяет имя хоста Как установить APT / dpkg на любой Linux, у которого его нет? Ввод вывода / dev / tty в переменную В FUSE, как мне получить информацию о пользователе и процессе, который пытается прочитать / записать в виртуальной файловой системе? Клавиатура не реагирует на xorg-server-1.13.1 Как временно извлечь флешку или жесткий диск в Linux? Не удается выполнить команду ping OUT сервера Mac OS X

Передача `scp` закрывается, когда я закрываю оболочку?

У меня есть передача scp (с одного удаленного сервера на другой), что довольно велико.

Так что, возможно, я хочу закрыть компьютер, с которого я выполнил эту команду, закончится ли передача? У меня есть ssh доступ к оболочке с помощью программы Bitwise.

Существует ряд решений.

Предыстория и отказ от процесса

  1. Откройте ssh-терминал для удаленного сервера.
  2. Начните передачу scp как обычно.
  3. Обозначьте процесс scp ( Ctrl + Z , затем команду bg .)
  4. Отключите фоновый процесс ( disown ).
  5. Завершите сеанс ( exit ), и процесс продолжит работу на удаленном компьютере.

Одним из недостатков этого подхода является то, что дескрипторы файла для stdout и stderr будут по-прежнему содержать ссылки на tty вашей сессии ssh. Из-за этого терминал может зависать, когда вы пытаетесь выйти. Вы можете обойти это, набрав ~. для принудительного закрытия вашего ssh-клиента (эта последовательность escape должна следовать за новой строкой … см. также ~? ). Если процесс, который вы отказываетесь от записи, записывается в stdout или stderr, процесс может выйти преждевременно, если буфера tty переполняется.

Создайте сеанс экрана и отсоедините его

Экран GNU можно использовать для создания сеанса удаленного терминала, который можно отсоединить и продолжить работу на сервере после выхода из сеанса. Затем вы можете вернуться на сервер позже и снова подключиться к сеансу.

  1. Войдите в удаленный сервер через ssh.
  2. Запустите сеанс экрана, screen -D -R <session_name> .
  3. Начните передачу scp как обычно.
  4. Отсоедините сеанс экрана с помощью Ctrl + A, затем d .
  5. Завершить сеанс ssh ( exit )

Чтобы подключиться к сеансу:

  1. Войдите в удаленный сервер через ssh.
  2. Повторно подключиться к сеансу экрана, screen -D -R <session_name>

Выполнить команду без зависаний

См. Ответ, используя nohup .

Использование планировщика заданий

Это лучшее решение, если это периодическая задача, которую вы хотите автоматизировать.

Используйте crontab , at или batch чтобы запланировать передачу.

Вы можете использовать nohup(1) , т. Е. Сделать что-то вроде:

 nohup scp alice@source:/the/answer/of/all bob@target.example.com:/var/tmp/42 & 

Это создаст вывод nohup.out . Затем вы можете безопасно выйти из системы.

Да, это будет прекращено. Решение поддерживать сеанс терминала без подключения – это программа 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 (eg 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. 

Как сказано выше, вы можете использовать команду экрана, например:

  • Создать экран

user@server:~$ screen -S bigscptransfer

  • Вы сейчас на экране

ser@server:~$ scp bigfile.dat server2:.

  • Отсоедините от экрана с помощью CTRL + A, затем нажмите D

[detached from 5899.bigscptransfer]

  • Возобновите сеанс, когда вам это нужно:

user@server:~$ screen -r bigscptransfer

nohup scp shinto @ source: / home / data roose@target.example.com: / var / tmp / file

временно остановить команду с

CTRL + Z

поместите на фон команду, введите:

Б.Г.

yo может проверить процесс с помощью:

работы