Memiliki pekerjaan rsync selesai setelah menutup koneksi SSH

13

Saya mentransfer sejumlah besar file dari satu komputer ke komputer lain menggunakan rsync. Saya melakukan ini dengan SSHing ke komputer sumber dan menjalankan perintah seperti ini:

sudo rsync ssh --rsync-path="sudo rsync" source_dir [email protected]:dest_dir.

Bahkan jika saya menambahkan nohupsebelum perintah ini, setiap kali saya menutup jendela terminal dari mana saya SSHed, koneksi ditutup.

Bagaimana saya bisa memilikinya sehingga transfer file saya tetap berlanjut ketika saya menutup koneksi SSH saya?

jaynp
sumber

Jawaban:

16

Alasan mengapa nohuptidak membantu Anda adalah karena program ini bekerja dengan file IO standar.

Berikut adalah kutipan dari Halaman Wiki untuk nohup:

Catatan - Tidak melakukan pekerjaan latar belakang biasanya digunakan untuk menghindari penghentian saat keluar dari sesi SSH jarak jauh. Masalah lain yang sering muncul dalam situasi ini adalah ssh menolak untuk keluar ("hang"), karena ssh menolak kehilangan data apa pun dari / ke pekerjaan latar belakang. Masalah ini juga dapat diatasi dengan mengarahkan ulang ketiga aliran I / O:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &Juga perhatikan bahwa sesi SSH penutup tidak selalu mengirim sinyal HUP ke proses yang tergantung. Antara lain, ini tergantung pada apakah terminal semu dialokasikan atau tidak.

Anda bisa menggunakannya screenuntuk itu.

Cukup buat sesi layar dengan: screen -S rsync lalu, lepaskan layar Anda dengan CTRL+A d

Dan Anda dapat memutuskan koneksi dari SSH

bakytn
sumber
4
Saya ingin menambahkan bahwa ketika melakukan pekerjaan apa pun yang jika terputus, mis. Dengan koneksi yang hilang akan bermasalah, kemudian jalankan dalam sesi layar. Layar dirancang untuk melindungi terhadap kehilangan koneksi yang tidak disengaja. Anda dapat login dari jarak jauh, mulai layar, mulai pekerjaan Anda, dan jika Anda kehilangan koneksi Anda dapat menghubungkan kembali ke instance layar yang sedang berjalan. Layar memiliki fungsi lain yang bermanfaat - menangkap sesi ke file log, memiliki beberapa "layar" dalam satu sesi (menyimpan overhead jaringan), dan banyak pemirsa (gaya Kelas). Juga patut disebutkan bahwa tmux adalah alternatif layar.
Johan
6

Perintah layar itu baik-baik saja, tetapi tidak bekerja untuk kebutuhan saya.

Ini bekerja jauh lebih baik:

nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &
Ligemer
sumber
bekerja untuk saya, sama seperti jawaban yang diterima, terima kasih
Salaros