Bağlantı kesildikten sonra bir kabuk nasıl kurtarılır


36

Uzak bir CentOS 5.6 makinesinde bazı çalışmalar yapıyorum ve ağım düşmeye devam ediyor. Yeniden bağlandıktan sonra askı oturumlarımı kurtarabilmemin bir yolu var mı?

EDIT: Bazı güncelleme ve yükleme işlemlerini yum ile yapıyorum ve işlemler ne yapıyorlarsa devam etmeyi sürdürürse sorun olabilir.


6
tmux veya ekran.
40’ta

Yanıtlar:


63

Hiçbir yolu yok, ama bunu önlemek için kullanmayı seviyorum tmux. Smokine başladım, operasyonu başlatıyorum ve yoluma devam ediyorum. Geri dönüp bağlantının koptuğunu bulursam, tek yapmam gereken yeniden bağlanmak ve yazmak tmux attach.

İşte bir örnek.

$ tmux
$ make <something big>
......
Connection fails for some reason
Reconect

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0
Back in the tmux sesion

tmux'um yok ve benim yapılacaklar listemde olmayan şeyleri yükleyemem ...

5
@sergio Kalbim kanıyor :-)) Kullanın screen.

4
@sergio Bir Unix sisteminde, çalıştırmak için kök izinleri gerektirmeyen hemen hemen her uygulama, home dizinine yüklenebilir.
Kusalananda

35

Tmux ve ekran için öneriler hem iyi önerilerdir. Sorunuzun cevabını ima ediyorlar, ama aslında bunu söyleme. Sorunun cevabı şudur: imkân yok. Eğer ssh ile giriş yaparsanız, bağlantı koptuğunda kabuk sona erer. Çözüm, giriş yapmak ve hemen bir tür sanal terminal (örneğin tmux) başlatmaktır . Bağlantı koptuğunda, içinde bulunduğunuz kabuk sona erer, ancak yeni bir kabuk açıp sanal terminale yeniden bağlanabilirsiniz (içinde çalışmakta olduğunuz kabuğu çalıştıran)


Tamam. şimdi açık.

Varsayarsak yum süreç , halen (kabuk SIGHUP aldığımda hemen iptal etmedi) çalıştırır reptyr veya benzeri olabilir sürecini kurtarmak için yeterli veya herhangi bir gelecek çıkışı elde ki- --failing. Bununla birlikte, kabuk genellikle bağlantı kesildiğinde sonlandırılır.
12'de Eroen

@Eroen Yani, tmux kullanırken bile, OS bağlantının koptuğunu bulduğunda tmux işlemini sonlandıracak mı?
Dojo,

@Dojo Bağlantı sonlandırıldığında, tmux örneği durdurulacak, ancak tmux oturumu (ve yönettiği mermiler) açık kalacaktır.
William Pursell

Kullanıcı uzak ssh sunucusuyla olan bağlantıyı kaybetti, çünkü örneğin aniden RJ-45 kablosunu çıkardıysa, sanırım ssh sunucusu bu oturumu önceden belirlenmiş bir zaman aşımına kadar (örneğin 120 saniye) sürdürüyor. Öyleyse, bu durumda, kabloyu çıkardıktan sonraki 120 saniye içinde ssh sunucusu tarafında hala canlı olan bu oturuma devam etmenin bir yolu var mı?
Gab 好人 好人

8

William'ın dediği gibi kısa cevap hayır, imkân yok. Bunu önlemek için, bağlantıyı kesmeden önce ekran komutunu kullanabilirsiniz.


ne anladığımdan, ekran ile yum başlatmalıydım ... welll, ben yapmadım. Ben hala kullanılmakta olan diyor ve öldürmek zorlamak istemiyorum diyor yum. .. çalışan yum kontrolünü nasıl kazanabilirim?

ve byobu ekranına güzel bir tamamlayıcısı, otomatik olarak güzel bir grafik terminali başlatıldı almak için launchpad.net/byobu

Bildiğim kadarıyla, yapamazsınız, yum komutundan çıktınızı geçerli terim oturumunuza yönlendirmenin gizli bir yolu yoksa, ama kafamın tepesinden bir tane düşünemiyorum.
Nicholas Smith

Hata ayıklayıcıları kullanarak bunun kısmi çözümleri vardır & c. bir sürece yeni bir ana kabuk vermek. Reptyr bir tane ve bir blog yazısı sorunu, geçici çözümü ve diğer bazı uygulamaları açıklar.
Eroen

3

Hayır, bağlantıyı kestikten sonra kabuğunu kurtaramazsınız. Bunun yerine, yapabileceğiniz komutun bağlantı kesilmesinden sonra çalışmaya devam etmesini sağlamaktır.

Bunu başarmak için, çoğu kabuk üzerine yerleşik komutlar olan "nohup" ve "disown" komutlarını kullanın, yani hiçbir şey yüklemeniz gerekmez. Bu sadece etkileşimli olmayan komutlar için işe yarıyor.

Dolayısıyla, adımlar aşağıdaki gibi olacaktır:

  1. Sunucuya giriş yap
  2. Komutunuzu çalıştırın: "nohup sudo yum update &" (bu, tüm çıktıları mevcut dizininizdeki nohup.out dosyasına da kaydeder)
  3. "Disown% 1" komutunu çalıştır
  4. Bu noktada bağlantınızı kesmekten çekinmeyin veya bağlantınızın kesilmesini bekleyin :)

Sunucuya geri döndüğünüzde, komutun nasıl yapıldığını görmek için basitçe "tail nohup.out" komutunu kullanın.


Bu genel davada oldukça kötü olmaz mıydı ? Örneğin, bir kerede veya başka bir zamanda giriş yapmak isteyen komutlarla ... Tamamen etkileşimli olmayan komutlar için, yeterince iyi çalışabilir ve bir terminal çoklayıcısının genel giderinden kaçının (ve muhtemelen kurması gerekir).
bir CVn

Evet, bu yalnızca komutlarınız kullanıcı girişi istemiyorsa işe yarar, cevabı güncelledim. Genel olarak, bir terminal çoklayıcı, kesin olarak geçmenin yoludur, ancak başka hiçbir alet kurulmasına izin verilmediğinden bahsedilmiştir.
zigg

Kesinlikle, geçerli bir cevap, olası kullanım durumlarında sadece biraz sınırlı. Düzenleme ile oy verildi.
bir CVn

3

Birisi yanıt yerine yorumuna reptyr ekledi, bu yüzden onu oydan çıkaramıyorum, ancak düzenlenen soruya iyi bir cevap gibi görünüyor ve CentOS'ta harika çalıştı.

bakınız: https://github.com/nelhage/reptyr https://www.ostechnix.com/reptyr-move-running-process-new-terminal/

Yeniden bağlandıktan sonra askı oturumlarımı kurtarabilmemin bir yolu var mı?

EDIT: Bazı güncelleme ve yükleme işlemlerini yum ile yapıyorum ve işlemler ne yapıyorlarsa devam etmeyi sürdürürse sorun olabilir.

Aynı şey, bir yum güncelleme oturumuna olan uzaktan bağlantımı kaybettim. Bu yüzden aradım ve bu soruyu buldum ... sonra tekrar bağladım ve bu sefer ekranı kullandım:

  1. ssh yeniden
  2. ekran
  3. Yukarıdaki bağlantılara göre reptyr yükleyin
  4. ps -a | grep yum
  5. reptyr psid

ve orada hangi yum bazı saatler önce veren kurtarıldı isteminde yaşıyorum.

Teknik olarak cevapların hepsi doğrudur, bu asılmış bir oturumun kurtarılması DEĞİL, yetim bir sürecin mevcut oturuma yeniden gönderilmesidir. Ve çok kullanışlı, o da ...


1

Birçok kişinin öne sürdüğü gibi screenve tmux, ikisi de destek temel işlevlerini, ama bir tek her durumda birbirine üstün olduğunu söyleyemeyiz bu yüzden, farklı özgül özelliklere sahiptir. Örneğin, yalnızca tmux Pencere bölmeyi destekler , yalnızca GNU ekranı uzun satır kaydırmayı (Ctrl + ar) ile değiştirebilir. Burada daha ayrıntılı bir karşılaştırma bakın .

Ayrıca, özellikle bu ssh problemini çözecek araçlar var:

Autossh , ssh kopyasını başlatmak ve izlemek, ölmek veya trafiği kesmek durumunda gerektiği şekilde yeniden başlatan bir programdır. Fikir rstunnel'den.

Mosh , dolaşım sağlayan, aralıklı bağlantıyı destekleyen ve kullanıcı tuş vuruşlarının akıllı yerel yankı ve çizgi düzenlemesini sağlayan uzak terminal uygulamasıdır. Mosh, SSH'nin yerine geçti. Özellikle Wi-Fi, hücresel ve uzun mesafeli bağlantılar üzerinden daha sağlam ve duyarlı.


-1

Bu tmuxkabuk kullanılarak yapılabilir . Bağlantınız kesilirse, oturuma yeniden bağlanmanın en hızlı yolu:

tmux a #0

Bu, kabul edilen cevabın söylemediği hiçbir şeyi eklemez. Ayrıca, kullanıcının zaten tmuxçalışan bir oturumu olduğunu varsayar .
Kusalananda

2
Bu, " attacholarak kısaltabilirsiniz" diyen bu cevaba bir yorum olabilir a.
Jeff Schaller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.