Tidak dapat memasang kembali ke sesi layar setelah koneksi SSH terjatuh

16

Saya sebelumnya telah menyambung kembali ke sesi layar yang sudah berjalan lama dengan screen -dr control. Namun, kadang-kadang perintah ini tidak akan terpasang kembali ke layar dan sebagai gantinya menggantung selamanya (10+ menit setelah itu saya dibatalkan). Ini hanya terjadi ketika koneksi SSH terjatuh secara tiba-tiba dan tidak ketika layar dilepaskan dengan benar Ctrl-A d. Switch lain, seperti screen -xatau screen -D -RRjuga tidak berfungsi.

Posting ini menyarankan untuk membunuh PTY yang memegang sesi layar yang akan menyebabkan layar menyelesaikan pemutusannya. Namun, itu hanya membunuh shell dari mana screen -dr controldipanggil.

Sebagai contoh:

$ ps -ef | grep control | grep -v grep
nomad     7387  7109  0 13:05 pts/50   00:00:00 screen -dr control
nomad    15299     1  0 Nov27 ?        00:13:47 SCREEN -S control

$ ps -ef | grep bash | grep 'pts/50'
nomad     7109  7108  0 12:49 pts/50   00:00:00 -bash

Posting tertaut menyarankan untuk menghentikan bashproses dengan PID 7109. Ini juga akan membunuh screen -dr controlproses dengan PID 7387. Setelah itu, saya masih tidak dapat terhubung ke layar.

Proses SCREEN -S controlyang memulai sesi layar initsebagai induknya yang saya jelas tidak bisa membunuh.

Apakah ada cara untuk menyambung kembali ke sesi layar gantung?

Pembaruan: Ini terjadi pada CentOS 6.4 menggunakan kernel 2.6.32-358.6.1.el6.x86_64. Kerang semua versi bash 4.1.2 (1) -release.

Viktor Rosenfeld
sumber
3
Apa yang screen -lsdikatakan dalam kasus "menggantung" itu? screen -d -r <session>berarti "lepaskan dan pulihkan" sehingga tidak melepaskannya secara langsung tidak masalah. (Dan untuk sering melakukannya, itu tidak ...)
mveroone
Coba jalankan lsof pada proses layar, lihat apakah ada sesuatu yang "macet". Layar menggunakan soket unix untuk berkomunikasi antar proses, kemungkinan sesuatu telah membuatnya terbuka. Juga pastikan soket belum dihapus atau kepemilikannya berubah atau apalah. Secara umum Anda juga harus memasukkan OS dan versi apa yang Anda gunakan, walaupun saya tidak memiliki sesuatu yang khusus yang akan bergantung pada os saat ini.
Dan Pritts
3
Apakah Anda melakukan ssh'ing melalui hop lain, mis. Menggunakan netcat sebagai perintah proxy? Dalam hal ini saya memiliki masalah di mana koneksi ssh ke kotak pertama turun, tetapi perintah proxy netcat membuat koneksi ssh 'second' tetap terbuka. namun -d harus bekerja.
Jens Timmerman
Jens, saran Anda berhasil. Saya memang melakukan proxy melalui netcat dan membunuhnya di host perantara memungkinkan saya untuk menyambung kembali ke layar.
Viktor Rosenfeld
Mengapa Anda ingin membunuh proses induk perintah layar digantung ini? Anda ingin membunuh perintah layar melampirkan sendiri. # 7387 dalam kasus Anda.
Matthias Urlichs

Jawaban:

6

Saya pikir Anda harus mencoba

screen -DR 

lain kali - pemanggilan yang marah (huruf besar) harus memaksanya untuk memutuskan sesi lain yang diadakan oleh hop netcat perantara Anda.

pasifis
sumber
Saya mencoba ini, itu tidak berhasil. Membunuh proksi netcat melakukan trik.
Viktor Rosenfeld
Aneh. Itu harus. Apa yang terjadi?
Matthias Urlichs
Semua doa lebih lanjut dari layar (-dr, -x, -DR) digantung selamanya. Setelah saya membunuh proksi netcat, doa ini bekerja lagi.
Viktor Rosenfeld
1

Seperti yang disarankan oleh Jens Timmerman, alasan utama untuk perilaku aneh ini adalah bahwa saya terhubung ke server jarak jauh menggunakan SSH ProxyCommand dan ncat. Setelah mematikan ncatpada mesin perantara, saya dapat menghubungkan kembali ke sesi layar.

Viktor Rosenfeld
sumber
-2

Jika ini adalah masalah yang sering Anda dapat mempertimbangkan menggunakan mosh sebagai pengganti ssh:

http://mosh.mit.edu

Fred Concklin
sumber