Apakah transfer `scp` ditutup ketika saya menutup shell?
29
Saya memiliki scptransfer (dari satu server jauh ke yang lain), itu cukup besar.
Jadi mungkin saya ingin menutup komputer dari mana saya menjalankan perintah ini, apakah ini akan mengakhiri transfer? Saya memiliki sshakses ke shell menggunakan program Bitwise.
Latar belakang proses scp ( Ctrl+ Z, lalu perintah bg.)
Menolak proses latar belakang ( disown).
Hentikan sesi ( exit) dan proses akan terus berjalan pada mesin jarak jauh.
Satu kelemahan dari pendekatan ini adalah bahwa deskriptor file untuk stdout dan stderr masih akan berisi referensi ke tty sesi ssh Anda. Terminal mungkin hang ketika Anda mencoba keluar karena ini. Anda dapat mengatasi ini dengan mengetik ~.untuk memaksa menutup klien ssh Anda (bahwa urutan pelarian harus mengikuti baris baru ... lihat juga ~?). Jika proses yang Anda tinggalkan menulis ke stdout atau stderr, proses tersebut dapat keluar sebelum waktunya jika buffer tty memenuhi batas.
Buat Sesi Layar dan Lepaskan
Layar GNU dapat digunakan untuk membuat sesi terminal jarak jauh, yang dapat dilepas dan terus berjalan di server setelah Anda keluar dari sesi. Anda kemudian dapat login kembali ke server di kemudian hari dan pasang kembali ke sesi.
Masuk ke server jauh melalui ssh.
Mulai sesi layar screen -D -R <session_name>,.
Mulai scptransfer seperti biasa.
Lepaskan sesi layar dengan Ctrl+ Alalu d.
Hentikan sesi ssh ( exit)
Untuk memasang kembali sesi:
Masuk ke server jauh melalui ssh.
Pasang kembali ke sesi layar, screen -D -R <session_name>
Hai Damien, terima kasih atas berbagai jawaban dan pemformatan yang bagus. Tapi saya ingin kejelasan tentang mengapa Anda menentukan -D -Rbendera dimulai screen. Saya membaca halaman manual dan itu tidak membantu saya memahami: -D -R Attach here and now. ...
hello_there_andy
@hello_there_andy Manual menyatakan apa yang dilakukan -DR dengan jelas. Pada dasarnya, jika Anda memiliki sesi Layar sudah berjalan, itu akan menyambungkan kembali ke sana daripada membuat sesi baru (bahkan jika pengguna masuk ke sana melalui SSH - itu akan menendang mereka keluar, yang berguna jika pengguna tergantung karena ke koneksi jaringan yang buruk.)
Damien Ó Ceallaigh
1
Perhatikan bahwa menentukan nama sesi adalah opsional.
Damien Ó Ceallaigh
Ok saya pikir saya mengerti, tapi saya kira saya pikir (mungkin salah) itulah yang screen -r <session>melakukan ... jadi -DRberbeda hanya -rdalam hal itu dapat mengusir mereka? Bukan hanya menyambungkan kembali dan gagal jika ada pengguna lain di dalamnya.
hello_there_andy
Saya melakukan beberapa pengujian untuk memastikan. -D melakukan apa yang dilakukan -d, kecuali itu juga akan menutup koneksi SSH (logout pengguna) selain hanya melepaskan setiap sesi Layar yang ada. - ulangi sesi. -R menempelkan kembali sesi yang ada, tetapi akan membuat sesi baru jika tidak ada (-r akan gagal jika tidak ada sesi untuk disambungkan kembali.) Jadi, saya sedikit tidak akurat dalam deskripsi saya sebelumnya.
Damien Ó Ceallaigh
10
Anda dapat menggunakan nohup(1), yaitu, melakukan sesuatu seperti:
Pada &akhirnya membuat perbedaan bagi saya! Terima kasih!
winklerrr
6
Ya, itu akan dihentikan. Solusi untuk menjaga sesi terminal tetap hidup tanpa konektivitas adalah screenprogram:
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.
-D -R
bendera dimulaiscreen
. Saya membaca halaman manual dan itu tidak membantu saya memahami:-D -R Attach here and now. ...
screen -r <session>
melakukan ... jadi-DR
berbeda hanya-r
dalam hal itu dapat mengusir mereka? Bukan hanya menyambungkan kembali dan gagal jika ada pengguna lain di dalamnya.Anda dapat menggunakan
nohup(1)
, yaitu, melakukan sesuatu seperti:Ini akan membuat output dari
nohup.out
. Maka Anda bisa keluar dengan aman.sumber
&
akhirnya membuat perbedaan bagi saya! Terima kasih!Ya, itu akan dihentikan. Solusi untuk menjaga sesi terminal tetap hidup tanpa konektivitas adalah
screen
program:sumber
Seperti yang dikatakan di atas, Anda dapat menggunakan perintah layar, misalnya:
user@server:~$ screen -S bigscptransfer
ser@server:~$ scp bigfile.dat server2:.
[detached from 5899.bigscptransfer]
user@server:~$ screen -r bigscptransfer
sumber
nohup scp shinto @ sumber: / home / data [email protected]: / var / tmp / file
hentikan sementara perintah dengan
letakkan di latar belakang perintah, ketik:
kamu dapat memeriksa prosesnya dengan:
sumber