Bagaimana cara menyambungkan kembali ke sesi mosh terpisah atau menyingkirkan
Mosh: You have a detached Mosh session on this server (mosh [XXXX]).
yaitu apa yang setara dengan mosh
screen -D -R
atau mungkin
screen -wipe
Selanjutnya, di mana jawaban ini dapat ditemukan dalam dokumentasi?
killall mosh-server
? Terutama karena pidof dan killall benar-benar hal yang sama.killall
melakukan persis seperti yang dikatakan.killall mosh-server
Anda akan terputus.kill `pidof mosh-server`
Anda akan terlepas sama sajaYang mengejutkan saya, saya menggunakan CRIU ( https://criu.org ) untuk memeriksa dan me-restart klien mosh dan berhasil.
Mengejutkan.
Temukan PID mosh-klien Anda:
Kemudian, instal CRIU sesuai dengan instruksi mereka.
Kemudian, periksa seperti ini:
Kemudian, kembalikan:
Dan itu dia. Klien mosh Anda kembali.
Namun satu hal yang perlu diperhatikan adalah bahwa jika laptop Anda reboot (yang merupakan inti dari apa yang kami coba lindungi), mosh menggunakan
monotonic
jam untuk melacak waktu di sisi klien, yang tidak berfungsi di seluruh reboot. Namun, ini TIDAK akan berfungsi, jika laptop Anda hanya crash, itu tidak akan berfungsi karena nomor urut mosh akan tidak sinkron dengan versi yang diperiksa (biner akan dilanjutkan, tetapi komunikasi akan berhenti).Untuk memperbaikinya, Anda harus memberi tahu mosh untuk berhenti melakukan itu dan mengunduh kode sumber mosh. Kemudian, edit file ini:
Kemudian, cari
GETTIME
dan komentari baris itu.Kemudian lakukan:
Setelah itu, sesi klien mosh Anda yang diperiksa CRIU akan selamat dari reboot.
(Jelas Anda harus menulis sesuatu untuk melakukan pos pemeriksaan secara teratur agar bermanfaat. Tapi, itu latihan untuk pembaca).
sumber
Saya menyadari ini adalah posting lama, tetapi ada solusi yang sangat sederhana untuk ini, seperti yang disarankan oleh Keith Winstein, penulis mosh, di sini: https://github.com/mobile-shell/mosh/issues/394
Skenario: Saya masuk ke server jauh melalui mosh. Saya kemudian menjalankan layar dan memiliki proses yang berjalan di sesi layar, htop, misalnya. Saya kehilangan koneksi (baterai laptop mati, kehilangan koneksi jaringan, dll). Saya terhubung lagi melalui mosh dan mendapatkan pesan itu di server,
Yang harus saya lakukan adalah membunuh sesi mosh sebelumnya
dan pasang kembali ke sesi layar, yang masih ada .
Sekarang, htop (atau proses apa pun yang berjalan) kembali seperti sebelumnya tanpa gangguan. Hal ini sangat berguna untuk menjalankan pemutakhiran atau proses lain yang akan membuat server dalam keadaan berantakan dan tidak dikenal jika tiba-tiba terganggu. Saya berasumsi Anda dapat melakukan hal yang sama dengan tmux, meskipun saya belum mencobanya. Saya percaya inilah yang disarankan oleh Annihilannic dan eskhool.
sumber
Sebagai tambahan untuk jawaban Varta, saya menggunakan perintah berikut untuk menutup semua koneksi mosh kecuali yang sekarang:
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) | xargs kill
sumber
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) && xargs kill || echo "no active sessions to kill"
Seperti @varta tunjukkan, pemilik mosh sangat menentang pemasangan kembali dari klien yang berbeda untuk alasan keamanan. Jadi, jika klien Anda pergi (misalnya Anda me-restart laptop Anda) satu-satunya pilihan Anda adalah untuk mematikan sesi.
Untuk membunuh hanya sesi terpisah, Anda dapat menggunakan baris berikut (yang saya miliki sebagai alias di saya
.bashrc
).Perintah itu tergantung pada fakta bahwa
who
daftar pengguna yang terhubung termasuk sesi mosh, hanya sesi mosh terlampir memiliki "via mosh", dan bahwa sesi mosh memiliki pid dalam tanda kurung siku. Jadi ia menemukan pids hanya untuk sesi mosh terpisah dan melewati mereka untuk membunuh menggunakan xargs.Berikut ini adalah contoh
who
hasil untuk referensi:Alternatifnya adalah menggunakan variabel lingkungan mosh-server
MOSH_SERVER_SIGNAL_TMOUT
. Anda dapat mengaturnya untuk sesuatu seperti 300 di Anda.bashrc
pada sisi server . Kemudian jika Anda melakukanpkill -SIGUSER1 mosh-server
itu hanya akan membunuh mosh-server yang belum terhubung dalam 300 detik terakhir (yang lain akan mengabaikan SIGUSER1). Info lebih lanjut di halaman manual mosh-server . Saya menggunakan perintah di atas karena, setelah alias, sepertinya lebih mudah bagi saya.Catatan, seperti yang disebutkan oleh @Annihilannic, jika Anda menggunakan tmux / layar di dalam sesi mosh Anda maka sesi tmux / layar tersebut masih ada setelah Anda membunuh sesi mosh. Jadi Anda masih bisa melampirkannya (jadi Anda benar-benar tidak kehilangan banyak dengan membunuh sesi mosh sendiri)
sumber
Jawaban di sini mengklaim bahwa membunuh
mosh-server
adalah satu-satunya pilihan yang sebagian besar sudah usang, karena kita dapat menggunakancriu
danreptyr
memulihkan serta memasang kembali proses sewenang-wenang.Belum lagi bahwa saat ini kita
kill -USR1 mosh-server
hanya dapat membunuh sesi terpisah dengan cara yang bersih dan aman, tanpa menggunakanwho
output yang tidak aman atau perintah rumit untuk menghindari membunuh sesi kita sendiri.Di sebelah
criu
jawaban dari Michael R. Hines, ada sedikit lebih "ringan"reptyr
yang dapat digunakan untuk memasang kembali proses yang dimulai olehmosh-server
(yaitu bukanmosh-server
itu sendiri). Saya biasanya menggunakanuntuk membuat daftar pohon proses di bawah mosh-server yang terpisah, dan kemudian
untuk memasang kembali proses yang diinginkan ke terminal saya saat ini. Setelah mengulangi prosedur untuk semua proses yang saya pedulikan, saya
sedangkan saya berhati-hati untuk hanya membunuh sesi yang saya tahu milik saya (sistem bersama).
sumber
Unable to attach to pid 10103: Permission denied
Gunakan perintah ps untuk mendapatkan daftar tugas yang sedang berjalan atau gunakan ps -ef | ya ampun
Bunuh mosh PID menggunakan perintah ini:
Juga, untuk menutup semua koneksi mosh Anda dapat:
Perhatikan bahwa jika Anda saat ini terhubung melalui mosh, maka ini juga memutuskan Anda
sumber