Eğer ssh yaparsak ve bağlantıyı kesersek, devam eden bir operasyona ne olur?


10

Mv komutunu kullanarak bir dizini diğerine taşıyorum.

Ancak, bilgisayarımı kapatmak zorunda kaldım, bu da sunucuyla bağlantıyı kaybetmek anlamına geliyor.

Mv komutuna ne oldu?

Not: Yeniden oturum açtıktan sonra, bağlantıyı kapattığımda taşınmadığından emin olmama rağmen tüm dosyaların düzgün bir şekilde taşındığını gördüm. Görünüşe göre mv çalışmaya devam etti.

Bu steadfast.net bulut sunucusunda centosh makineye ssh.


Sanırım, kaynak / hedef bulunmaması hakkında bir hata atacak
SHW

1
bir dizini diğerine taşımak, aynı bölümdeyse "anlık" dır. Dosyaları dosya başına taşısanız bile hızlı olabilir. Eğer Are de emin o devam etmedi sonra bazı [bilgisayar ölçeğinde] zaman alabilir, bağlantınız yerine farklı SIGHUP sinyalleri alt süreçlere gönderilir iken bitirme (.
Olivier Dulac

geçici bir çözüm olarak, bağlantıyı kestiğinizde çalışmaya devam edecek bir sanal terminal başlatmak için kullanın screenveya tmuxoturum açtıktan sonra [yani, daha sonra yeniden bağlayabilir ve terminali bıraktığınız durumla birlikte artı arasındaki]
Olivier Dulac

Yanıtlar:


19

Şu mvşekilde başlatılmışsa:

ssh host mv x y

Daha sonra mvstdout veya stderr'e (hata mesajı gibi) bir şey yazmaya çalışırsa bir SIGPIPE (ve ölür) alır.

Şöyle bir etkileşimli oturum başlattıysanız:

ssh host

Ve mvoradaki etkileşimli kabuktan başladı , sözde terminalin ana tarafı sshdkapatıldığında ( sshçıkışta TCP bağlantısı kapatıldıktan sonra), sözde terminalin köle tarafı ile ilişkili oturumun lideri, uzaktan etkileşimli kabuk, bir SIGHUP sinyali alır (telefonu kapatır).

Bu sinyali aldıktan sonra, mermiler (siz a göndermediyseniz trap '' HUP), açıkça belirtmediğinizi ( bazı mermilerde olduğu gibi disownveya &|bazı mermilerde olduğu gibi) belirtmedikçe, bu sinyali başlattıkları işlerdeki tüm süreçlere iletir .

Diğer işlemler (gibi mv), sinyali yok saymadıkları sürece (sinyalleri kullanarak nohupveya ebeveynleri yoksaydı) bu sinyali alırken ölecektir .

Şunu yayınladıysanız:

trap '' HUP

Daha sonra başlatılan tüm işler miras alır ve SIGHUP'u yok sayar.

Kabuk, bağlantı kesme sırasında gönderilen SIGHUP sinyalinden ölmeyecek, ancak stdin gittiğinden bir sonraki istemde çıkacaktır. Çıkıştan sonra bazı mermiler SIGHUP'u (sahipsiz) işlerine gönderir. İradeden sonra başlayanlar trap '' HUPgörmezden gelir, diğerleri ölür.

Kısacası, bu durumda, gerçekleşmemesi için önceden önlem almadıysanız, mvölürsünüz.

Bir dahaki sefere bunu önlemek kullanılıyorsa için tcsh, zshya da bashmakineyi kapatmadan önce, basın Ctrl-Zaskıya almak mv, girmek bgarka planda devam etmek ve disownkarşı inkâr bunu.

Veya screenveya kullanabilirsiniz tmux. Bir SIGHUP üzerine, bunlar artık gitmiş olan ana bilgisayar terminallerinden ayrılacaklar, ancak öyküntüğü terminalde çalışan uygulamalar başsız çalışmaya devam edecek ve nasıl mvgittiğini görmek için oturumu daha sonra başka bir terminale yeniden bağlayabilirsiniz .

Veya SIGHUP ile bağışıklık nohup mvkazanmak için kullanın mvve çıktı ve hatalarının nohup.outdaha sonra kontrol edebileceğiniz bir dosyaya gitmesini sağlayın .

Şimdi, özel barındırma sağlayıcınız bilmem ama bazı ile, sshörneğin içine, oraya bir kabuk oturumları başlayan fakat değiliz yerine takmak zaten başlamış olan bir oturuma olduğunu, konsola ve çıktığınızda, bu oturumu sonlandırmazsınız, yalnızca oturumdan ayırın. Yani, mermi öldürülmez ve öldürmez mv. Bu durumda, psoradan koşmanın pidkabuğunuz için iki ayrı sshoturumda size aynı şeyi vereceğini fark edeceksiniz .


Yani mv'nin sonlandırılacağını söylüyorsunuz. Lütfen notu kontrol edin.
user4951

2
+1. üstün cevap (ne olduğunu ve ne zaman açıklamak için ayrıntılara iyi gider gibi).
Olivier Dulac

Ben derledik bir makale dayanarak sizin cevaplar . Umarım, birileri yardımcı olacaktır.
x-yuri
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.