GNU/Linux >> Belajar Linux >  >> Linux

Lanjutkan perintah yang berjalan di sesi SSH yang dijatuhkan

Solusi 1:

Mencoba menyambungkan deskriptor file STD* terminal baru saat ini ke proses lama yang sedang berjalan hanya akan menimbulkan masalah. Bahkan jika Anda berhasil melakukannya, kontrol pekerjaan terminal tidak akan berfungsi seperti yang diharapkan. Anda akan memiliki kekacauan yang tertinggal jika Anda akhirnya keluar dari program yang diambil alih, dan apa yang terjadi pada shell yang mengorbankan deskriptor file untuk diserahkan ke proses yang baru dilatarbelakangi. Akankah ssh tetap terbuka saat cangkang itu hilang? Mungkin tidak. Jadi, Anda harus mengalihkannya ke tempat lain terlebih dahulu.

Mungkin atau tidak, saya berani bertaruh bahwa lebih baik membiarkan proses yang ditinggalkan terbunuh "secara alami". Jika Anda melakukan sesuatu yang cukup penting untuk dibenarkan mencoba melakukan semua peretasan yang diperlukan untuk melanjutkan kontrol dan Anda berada di tautan yang tidak stabil, Anda mungkin harus mengetahuinya terlebih dahulu dan cukup gunakan layar (atau vnc, atau apa pun yang mengapungkan perahu kendali terpisah Anda). :)

Solusi 2:

Saya tahu ini adalah pertanyaan lama , tetapi saya merasa penting untuk menambahkan temuan saya jika ada orang lain yang menemukan ini seperti saya.

Saya belum melihat konsekuensi yang tidak biasa untuk melakukan ini ya, tapi inilah yang saya gunakan dan berhasil dengan luar biasa. Terkadang ketika kita menjalankan proses yang panjang di server kita, terkadang sesi ssh akan terputus. Proses bersama dengan sesi tty tampaknya tetap berjalan tetapi kami tidak dapat menyambungkannya kembali. Saya menemukan program di bawah untuk menarik proses ke sesi yang baru terhubung.

https://github.com/nelhage/reptyr

Berikut info lebih lanjut

https://blog.nelhage.com/2011/02/changing-ctty/

Solusi 3:

Secara umum, cara yang tepat untuk menangani hal ini adalah mempersiapkannya jauh-jauh hari, menggunakan GNU screen atau nohup bash atau disown mekanisme. Jika Anda menggunakan tcsh , shell akan menolak pekerjaan latar belakang saat keluar secara tidak normal.

Jika Anda tidak menggunakan screen tetapi telah berhasil membuat proses Anda tetap berjalan melalui salah satu disown metode, Anda mungkin dapat memalsukan penyambungan kembali ke proses dengan gdb (sumber):

[...] dengan beberapa peretasan kotor, tidak mungkin membuka kembali proses stdout/stderr/stdin. [...]

Dan kemudian gunakan gdb misalnya untuk melampirkan ke proses, lakukan beberapa panggilan tutup (0)
tutup panggilan (1)
tutup panggilan (2)
panggil buka("/dev/pts/xx", ...)
panggil dup(0)
panggil dup(0)
lepaskan

Sekarang, Anda harus men-tweak proses ini untuk situasi Anda. Saya ragu akan membantu jika Anda tidak berhasil menyangkal proses. Jika Anda menggunakan bash , lihat postingan ini tentang membuat bash secara otomatis menyangkal proses latar belakang saat keluar (pada dasarnya, matikan huponexit dengan belanja ). Dengan proses latar depan, Anda harus menggunakan nohup .


Linux
  1. 4 Cara Agar Perintah Tetap Berjalan Setelah Anda Keluar Dari Sesi SSH

  2. Ssh – Biarkan Proses Tetap Berjalan Setelah Sesi Ssh Terputus?

  3. Menjalankan skrip PHP dari baris perintah sebagai proses latar belakang

  1. Bagaimana Cara Melihat Output Dari Proses yang Berjalan Di Sesi Bash Lain?

  2. Bagaimana cara melepaskan sesi ssh tanpa mematikan proses yang sedang berjalan?

  3. Menentukan prosesor tertentu di mana proses sedang berjalan

  1. Bagaimana Cara Melanjutkan Sesi Gnome?

  2. Bagaimana Cara Membunuh Baris Perintah Chromium Melalui Ssh?

  3. Tetap Menjalankan Program Python Bahkan Setelah Keluar dari Sesi Ssh?