it-swarm-tr.com

SSH oturumunun bağlantısı kesildikten sonra süreçleri çalışır durumda tutma

Bazen eve gitmeden önce başlamak istediğim uzun süren süreçlerim var, bu yüzden süreci başlatmak için sunucuya bir SSH oturumu oluşturuyorum, ancak sonra dizüstü bilgisayarımı kapatmak ve eve gitmek istiyorum ve daha sonra akşam yemeğinden sonra işten ayrılmadan önce başladığım süreci kontrol et. SSH ile bunu nasıl yapabilirim? Anladığım kadarıyla, SSH bağlantınızı keserseniz, sunucudaki oturum açma oturumunuzu da kesersiniz, bu nedenle uzun süren işlemi öldürürsünüz.

216
λ Jonas Gorauskas

İşleminizin kapatma sinyalini yoksaymasını sağlamak için Nohup kullanın:

$ Nohup long-running-process &
$ exit
217
Warren Young

GNU Ekranı kullanmak istiyorsunuz. Süper harika!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+a , d ekran oturumunuzdan ayrılmak için

exit                 #disconnect from the server, while run-a-long-process continues

Dizüstü bilgisayarınıza geri döndüğünüzde:

ssh [email protected]
screen -r            #resume the screen session

Öyleyse uzun süren sürecinizin ilerlemesini kontrol edin!

screen çok kapsamlı bir araçtır ve tarif ettiğimden çok daha fazlasını yapabilir. Bir ekran oturumundayken, ctrl + a ,? birkaç yaygın komut öğrenmek için. Muhtemelen en yaygın olanları:

  • CTRL+a , c yeni bir pencere oluşturmak için
  • CTRL+a , n ekran oturumunuzdaki bir sonraki pencereye geçmek için
  • CTRL+a , p ekran oturumunuzda bir önceki pencereye geçmek için
  • bir dizi farklı sistemden oturum açarsanız, yanlışlıkla farklı bir bilgisayardaki etkin bir ekran oturumuna bağlı kalmış olabilirsiniz. bu nedenle daima screen -d -r Ekran oturumuma başka bir Kabuk eklenirse, geçerli sistemime devam ettirmeden önce ayrılmasını sağlamak için.
143
Sandy

İleride planlama yapmadıysanız ve screen vb. Kurulumunu yapmadıysanız şunları yapın:

  1. İşleminiz arka planda çalışıyorsa: # 3'e gidin, aksi takdirde: Ctrl-Z ön plan işlemini askıya almak için. Bu, askıya alınan işlemin iş numarasını bildirir, örneğin:

    [1]+  Stopped                 processName
    
  2. processName ile bg %1 (# işi her ne olursa olsun %). Arka planda processName devam edecektir.

  3. ReddetmeprocessName ve disown %1 veya disown PID. Kullan -h Geçerli Kabuğunuzu sonlandırana kadar sahipliği korumak istiyorsanız işaretleyin.

42
Mike Covington

Kullanmak istediğiniz şey ekran veya daha iyi byobu adı verilen ekranın etrafındaki kullanıcı dostu bir ambalajdır.

Ekran, aynı ssh oturumunda birden fazla sanal terminal oturumu çalıştırmanıza izin verir. A eğitim ve yardım sayfaları kullanılabilir.

byob , ctrl-a tuş kombinasyonu yerine basit bir işlev tuşu ile yeni ekranları kolayca açmaya izin veren bir sarmalayıcıdır. Ayrıca adlandırılabilen tüm açık sanal terminallerle birlikte bir durum satırı gösterir.

Başka bir güzel özellik, ssh bağlantınız kesikken tüm ekranınızın ayakta kalabilmesidir. Sadece ssh ile tekrar bağlanın ve byobu arayın ve her şey eskisi gibi.

Sonunda bazı ekran görüntüleri ofobu.

15
txwikinger

Bunu belirtmeye değer olabilir

ssh -t lala screen -rxU moo Sunucudaki moo oturumuna eklenecek lala

ssh -t lala screen -S moo Sunucuda moo oturumunu oluşturacak lala

ve

ssh -t lala screen -S moo quux Sunucuda moo oturumunu oluşturacak lala ve tamamlandıktan sonra oturumu sonlandırarak quux programını çalıştıracaktır.

9
cjac

Burada iyi bir rehber bulabilirsiniz: Bağlantıyı Keserken SSH Oturumunuzu Çalıştırın

Sudo apt-get install screen

Artık komut satırına sadece ekran yazarak yeni bir ekran oturumu başlatabilirsiniz. Ekran hakkında bazı bilgiler gösterilir. Enter tuşuna basın, normal bir İstemde olacaksınız.

Bağlantıyı kesmek için (ancak oturumu çalışır durumda bırakmak için)  Ctrl + A ve sonra Ctrl + D anında. [Müstakil] mesajını göreceksiniz

Zaten çalışan bir oturuma yeniden bağlanmak için

screen -r

Mevcut bir oturuma yeniden bağlanmak veya yoksa yeni bir oturum oluşturmak için

screen -D -r

Çalışan ekran oturumunun içinde yeni bir pencere oluşturmak için  Ctrl + A ve sonra C anında. Yeni bir Bilgi İstemi göreceksiniz.

Bir ekran penceresinden diğerine geçmek için  Ctrl + A ve sonra Ctrl + A anında.

Açık ekran pencerelerini listelemek için  Ctrl + A ve sonra W derhal

4

Eski soru, garip hala kimse tavsiye tmux , bu n konsollar için bir sarıcı olarak davranır ve ihtiyaç kadar onları açık tutmak. Bu, tmux'un sahip olduğu bir dizi fonksiyonun yanında daha fazla kontrole izin verir. Bunu yönetmek kolaydır, sadece Shell'e getiren tmux'u çalıştırırsınız, tuvalet işinize başlarsınız, sonra ctrl + b'ye ve ardından d (ayır) tuşuna basın (ctrl+b, tmux'un "ok google" dır ve d Kabuktan çıkmadan kapatma komutudur). Bu aslında örneğin PuTTY'yi kapatırsanız işe yarar. Akşam yemeğinden sonra, tekrar bağlandığınızda, tmux'u tmux attach ekranınızı tam olarak bıraktığınız gibi görmek için. Sevdiğim bir şey bölmeyi bölmek: ctrl+b ve ardından ". Bir bölmeden diğerine geçmek için ctrl+b düğmesine basın ve ardından yukarı/aşağı oka basın.

4
nnsense

Benim için ücretsiz olan NX NoMachine kullanıyorum çünkü bu sadece benim. Temel olarak, sunucuda tekrar tekrar bağlanıp bağlantıyı kesebileceğiniz bir X oturumu çalıştırır. X oturumu bağlı olmadığınızda çalışmaya devam eder. Bağlantılar her yerden yapılabilir. Yüzen pencereler veya tüm masaüstünü içeren tek bir pencere (örn. Tam bir Gnome masaüstü) arasında seçim yapabilirsiniz. İstemci (dizüstü bilgisayarınızda çalıştıracağınız) Linux, MacOS, Solaris veya Microsoft Windows üzerinde çalıştırılabilir. İkinci durumda, kayan pencereleri seçerseniz, Windows Görev Çubuğunda ayrı ayrı görünürler.

NX Nomachine kullanan iki Linux sunucum için bir ön uç olarak Windows XP dizüstü bilgisayarımı (sahip olduğum belirli Windows'a özgü donanım için ihtiyacım var) kullanıyorum. Linux'tan Windows dizüstü bilgisayarım.

2
Rob_before_edits

Tmux , uzun süredir devam eden süreçlerinizi arka planda çalıştırmak için iyi bir seçenektir.

Uzun süredir devam eden süreçleri bir google bulut platformunun VM bulut sunucusu/sunucusunda (OS: Ubuntu 16.0 ile) çalıştırmaya devam etmeliyim. SSH terminalini ve terminalden başlatmam gerekiyor İşlemi yürütmek için terminali bağlı tutmak için Şimdi buna kadar, hepsi iyi.Ancak SSH terminalimle bağlantı kesilirse, uzun süre çalışan işlemler hemen durur ve bu yüzden bunları bir kez daha çalıştırmam gerekir. ssh terminali yeniden başlatılır veya yeni bir ssh terminalinden.

tmux, terminal kapatıldıktan sonra bile çalıştırmak istediğimiz işlemlerin sonlandırılmasından kaçınmak için iyi bir çözüm buluyorum.

tmux oturumunu başlatmak için Terminal Çoklayıcı (tmux):

  1. Ssh terminalini başlat
  2. tmux yazın. Aynı terminalde bir pencere açılacaktır.
  3. Tmux oturumunda uzun süren işlemleri başlatmak için komutu çalıştırın.

Şimdi SSH terminali kapatılsa/sonlandırılsa bile tmux oturumu, sunucuda/sunucuda başlatılan yalnız çalışan işlemleri çalıştırmaya devam edecektir.

Bağlantı sonlandırılırsa, arka planda tmux oturumunda çalışan işlemleri görmek için nasıl yeniden bağlanılacağı:

  1. yeni ssh terminalini yeniden bağlayın veya açın. Bu işlemi (arka planda çalışmaya devam eder) görmek için şunu yazın: tmux attach komutu.

Tmux oturumunu sonlandırmak istiyorum:

  1. İşlemi durdurun. Ardından tmux-terminal-penceresine exit yazın.

(Şunu unutmayın: tmux detach command: tmux oturumlarını sonlandırmadan/durdurmadan tmux oturum penceresinden/terminalden çıkar)

Daha fazla ayrıntı için lütfen aşağıdaki makaleye bakın:

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-background/
1
Yogesh