Есть ряд решений.
Фон и отречься от процесса
- Откройте терминал ssh для удаленного сервера.
- Начните
scp
перевод как обычно.
- Фоновый процесс scp ( Ctrl+ Z, затем команда
bg
.)
- Отказаться от фонового процесса (
disown
).
- Завершите сеанс (
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>
Запустить команду без зависаний
Смотрите ответ, используя nohup
.
Используйте планировщик задач
Это лучшее решение, если это периодическая задача, которую вы хотите автоматизировать.
Используйте crontab
, at
или batch
запланировать передачу.
-D -R
стартовые флагиscreen
. Я прочитал справочную страницу, и это не помогло мне понять:-D -R Attach here and now. ...