Kabuğu kapattığımda “scp” aktarımı kapanıyor mu?


29

Ben scp(bir uzak sunucudan diğerine) transferi, oldukça büyük.

Belki de bu komutu uyguladığım bilgisayarı kapatmak istiyorum, aktarım sona erecek mi? Ben sshprogramı Bit kullanarak kabuk erişimi.

Yanıtlar:


34

Çok sayıda çözüm var.

Arkaplan ve Süreci Yok Etmek

  1. Uzaktaki sunucuya ssh terminalini açın.
  2. scpHer zamanki gibi aktarıma başlayın .
  3. Scp işlemini ( Ctrl+ Z, ardından komutu bg.)
  4. Arka plandaki işlemden ( disown) vazgeç .
  5. Oturumu sonlandırın ( exit) ve işlem uzaktaki makinede çalışmaya devam eder.

Bu yaklaşımın bir dezavantajı, stdout ve stderr için dosya tanımlayıcılarının hala ssh oturumunuzun tty'sine referansları içermesidir. Bundan dolayı çıkmaya çalıştığınızda terminal kilitlenebilir. Bu ~.soruyu ssh istemcinizi kapatmaya zorlayarak yazabilirsiniz (kaçış dizisi yeni bir satır izlemelidir ... ayrıca bakınız ~?). Terk ettiğiniz işlem stdout'a veya stderr'a yazarsa, tty tamponu dolduğunda işlem erken çıkabilir.

Bir Ekran Oturumu Oluşturun ve Ayırın

GNU Screen , oturumu kapattıktan sonra ayrılabilir ve sunucuda çalışmaya devam eden uzak bir terminal oturumu oluşturmak için kullanılabilir. Daha sonra sunucuya daha sonraki bir tarihte tekrar giriş yapabilir ve oturuma yeniden bağlayabilirsiniz.

  1. Uzak sunucuya ssh üzerinden giriş yapın.
  2. Bir ekran oturumu başlatın screen -D -R <session_name>.
  3. scpHer zamanki gibi aktarıma başlayın .
  4. İle ekran oturumu ayırın Ctrl+ Asonra d.
  5. Ssh oturumunu sonlandır ( exit)

Oturuma yeniden bağlamak için:

  1. Uzak sunucuya ssh üzerinden giriş yapın.
  2. Ekran oturumuna tekrar takın, screen -D -R <session_name>

Gerektirmeyen Komutu Çalıştır

Kullanarak cevaba bakınız nohup.

Görev Zamanlayıcı Kullan

Otomatikleştirmek istediğiniz periyodik bir görev ise bu en iyi çözümdür.

Kullanım crontab, atya batchtransferini planlamak için.


Merhaba Damien, güzel cevaplar ve biçimlendirme için teşekkürler. Ama neden -D -Rbayrakların başladığını belirlediğin konusunda netlik istedim screen. Man sayfasını okudum ve anlamama yardımcı olmadı:-D -R Attach here and now. ...
hello_there_andy

@hello_there_andy El kitabı, -DR'nin açıkça ne yaptığını belirtir. Temel olarak, halihazırda çalışan bir Ekran oturumunuz varsa, yeni bir oturum oluşturmak yerine, yeni bir oturum oluşturmak yerine yeniden bağlar (bir kullanıcı SSH üzerinden oturum açmış olsa bile - onları tekmeleyecek, bu durumda kullanıcı takılıyorsa yararlıdır) kötü bir ağ bağlantısına.)
Damien eal Ceallaigh

1
Bir oturum adı belirtmenin isteğe bağlı olduğunu unutmayın.
Damien eal Ceallaigh

Tamam sanırım anladım, ama sanırım (belki de yanlış) bunun ne screen -r <session>yaptığını düşündüm ... bu yüzden onları dışarı atabildiğine göre -DRfarklı -rmı? Yalnızca başka bir kullanıcı varsa, yeniden takın ve başarısız olmaz.
hello_there_andy

Emin olmak için bazı testler yaptım. -D, sadece mevcut herhangi bir Ekran oturumunu ayırmanın yanı sıra SSH bağlantısını da kapatması dışında (kullanıcının oturumu kapatması dışında) -d ne yapar? -r oturumu yeniden bağlar. -R var olan bir oturumu yeniden bağlar, ancak mevcut değilse yeni bir oturum oluşturur (eğer eklenecek bir oturum yoksa -r başarısız olur.) Bu yüzden önceki açıklamamda biraz yanlışdım.
Damien eal Ceallaigh

10

Kullanabilir nohup(1), yani şöyle bir şey yapabilir:

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

Bu bir çıktı yaratacaktır nohup.out. O zaman güvenli bir şekilde çıkış yapabilirsiniz.


&Sonunda benim için fark yarattı! Teşekkürler!
winklerrr

6

Evet, sonlandırılacak. Bağlantı yapılmadan terminal oturumunu canlı tutmanın çözümü screenprogramdır:

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.

2

Yukarıda belirtildiği gibi, ekran komutunu kullanabilirsiniz, örneğin:

  • Ekran oluştur

user@server:~$ screen -S bigscptransfer

  • Şimdi ekrandasın

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

  • CTRL+ Tuşlarını kullanarak ekrandan ayırın ve Aardından tuşuna basın.D

[detached from 5899.bigscptransfer]

  • İhtiyacınız olduğunda oturumu sürdürün:

user@server:~$ screen -r bigscptransfer


-1

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

geçici olarak komutu durdur

CTRL + z

arka plana komutu koymak, şunu yazın:

bg

İşlemi şu şekilde kontrol edebilirsiniz:

Meslekler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.