'Scp' передает близко, когда я закрываю оболочку?

Возможно, необходимо рассмотреть возможности как:

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

29
18.02.2013, 01:14
5 ответов

Существует много решений.

Фон и Отрицает Процесс

  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 запланировать передачу.

34
27.01.2020, 19:38
  • 1
    Привет Damien, спасибо за хорошее множество ответов и форматирования. Но я хотел некоторую ясность в том, почему Вы указали -D -R запуск флагов screen. Я прочитал страницу справочника, и она не помогла мне понять: -D -R Attach here and now. ... –  hello_there_andy 14.02.2017, 23:18
  • 2
    @hello_there_andy ручные состояния, что - DR делает ясно. В основном, если у Вас будет Экранная сессия, уже работающая, то она повторно прикрепит к нему вместо того, чтобы создать новую сессию (даже если пользователь будет зарегистрирован к ней через SSH то - она выгонит их, который полезен, если пользователь зависает из-за плохого сетевого соединения.) –  Damien Ó Ceallaigh 15.02.2017, 04:56
  • 3
    Обратите внимание, что определение имени сессии является дополнительным. –  Damien Ó Ceallaigh 15.02.2017, 05:02
  • 4
    Хорошо я думаю, что понимаю, но я предполагаю, что думал (возможно, неправильно), это что screen -r <session> сделал... так -DR отличается от просто -r в этом это может выгнать их? Не только повторно прикрепляют и перестали работать, если другой пользователь находится на нем. –  hello_there_andy 15.02.2017, 05:21
  • 5
    я сделал некоторое тестирование, чтобы быть бесспорным.-D делает то, что делает-d, кроме него также закроется, соединение SSH (выйдите из системы пользователь) в дополнение только к отсоединению любых существующих Экранных сессий.-r повторно прикрепляет сессию.-R повторно прикрепляет существующую сессию, но создаст новую сессию, если бы Вы не существуете (-r, перестал бы работать, если нет никакой сессии для повторного прикрепления к.) Так, я был немного неточен в своем предыдущем описании. –  Damien Ó Ceallaigh 15.02.2017, 08:20

Да, это будет завершено. Решение поддержать терминальный сеанс, живой без возможности соединения, 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.
6
27.01.2020, 19:38

Вы могли использовать nohup(1), т.е. сделайте что-то как:

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

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

10
27.01.2020, 19:38

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

  • Экран Create

user@server:~$ screen -S bigscptransfer

  • Вы находитесь теперь на экране

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

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

[detached from 5899.bigscptransfer]

  • Сессия резюме, когда Вам нужен он с:

user@server:~$ screen -r bigscptransfer

2
27.01.2020, 19:38

NOHUP SCP SHINTO @ Источник: / Главная / Data (Hidden)

Временно останавливается Команда с

Ctrl + Z

Направьте на фоне команды, тип:

BG

YO может проверить процесс:

задания

-1
27.01.2020, 19:38

Теги

Похожие вопросы