A transferência de 'scp' fecha quando fecho o shell?

25

Eu tenho scp transfer (de um servidor remoto para outro), isso é muito grande.

Então talvez eu queira fechar o computador do qual eu executei este comando, isso terminará com a transferência? Eu tenho ssh de acesso ao shell usando o programa Bitwise.

    
por Borut Flis 17.02.2013 / 22:54

5 respostas

31

Existem várias soluções.

Antecedentes e amp; Desprezar o processo

  1. Abra o terminal ssh no servidor remoto.
  2. Inicie a scp transferência como de costume.
  3. Background o processo scp ( Ctrl + Z , depois o comando bg .)
  4. Desprezar o processo em segundo plano ( disown ).
  5. Encerre a sessão ( exit ) e o processo continuará a ser executado na máquina remota.

Uma desvantagem desta abordagem é que os descritores de arquivo para stdout e stderr ainda conterão referências ao tty da sua sessão ssh. O terminal pode travar quando você tenta sair por causa disso. Você pode resolver isso digitando ~. para forçar o fechamento do seu cliente ssh (essa seqüência de escape deve seguir uma nova linha ... veja também ~? ). Se o processo que você está abandonando escreve para stdout ou stderr, o processo pode sair prematuramente se o buffer tty transbordar.

Crie uma sessão de tela e desconecte-a

O

Tela GNU pode ser usado para criar uma sessão de terminal remoto, que pode ser desanexada e continuar a ser executada servidor depois de sair da sessão. Você pode então voltar ao servidor em uma data posterior e reconectar à sessão.

  1. Faça login no servidor remoto por ssh.
  2. Inicie uma sessão de tela, screen -D -R <session_name> .
  3. Inicie a scp transferência como de costume.
  4. Separe a sessão de tela com Ctrl + A e então d .
  5. Encerrar a sessão ssh ( exit )

Para reativar a sessão:

  1. Faça login no servidor remoto por ssh.
  2. Recoloque-se na sessão de tela, screen -D -R <session_name>

Executar o Comando sem Hangups

Veja a resposta usando nohup .

Use um Agendador de Tarefas

Esta é a melhor solução se esse for um tipo de tarefa periódica que você deseja automatizar.

Use crontab , at ou batch para agendar a transferência.

    
por 18.02.2013 / 03:20
8

Você pode usar nohup(1) , ou seja, fazer algo como:

nohup scp alice@source:/the/answer/of/all [email protected]:/var/tmp/42 &

Isso criará uma saída de nohup.out . Então você pode sair com segurança.

    
por 17.02.2013 / 23:23
6

Sim, será encerrado. A solução para manter a sessão de terminal ativa sem conectividade é o programa 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.
    
por 17.02.2013 / 23:03
1

Como dito acima, você pode usar o comando screen, por exemplo:

  • Criar tela

user@server:~$ screen -S bigscptransfer

  • Agora você está na tela

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

  • Separe da tela usando CTRL + A e, em seguida, pressione D

[detached from 5899.bigscptransfer]

  • Retomar sessão quando precisar dela com:

user@server:~$ screen -r bigscptransfer

    
por 21.02.2013 / 14:43
-1

nohup scp shinto @ fonte: / home / data [email protected]: / var / tmp / file

pare temporariamente o comando com

CTRL+z

colocar em segundo plano o comando, digite:

bg

Você pode verificar o processo com:

jobs

    
por 23.10.2014 / 08:01

Tags