ssh oturumunu bitirdikten sonra süreçler nasıl devam eder?

504

Diyelim ki bir ssh oturumundan bir sürü işlem başlatıyorum. Bu işlemleri uzak makinede çalışırken ssh oturumunu sonlandırmak mümkün mü?

    
sordu Olivier Lalonde 21.10.2010 14:09

14 cevap

592

tmux gibi modern alternatifleri aramalısınız.

tmux , birçok nedenle screen 'ye göre daha üstündür. Burada bazı örnekler verilmiştir:

  • Windows, oturumlar arasında ve hatta çoklu oturumlara bağlanabiliyor
  • Windows, yatay ve dikey olarak bölmelere ayrılabilir
  • UTF-8 ve 256 renkli terminaller için destek
  • Oturumlar, oturum açmaya gerek kalmadan kabuktan kontrol edilebilir

Temel İşlevsellik

screen değerini öneren yanıt 'da açıklandığı şekilde aynı işlevselliği elde etmek için, aşağıdakileri yapmanız gerekir:

  • uzak makineye ssh
  • tmux 'yi kabuk içine yazarak tmux ' yi başlat
  • tmux başlatılan oturumun içinde istediğiniz işlemi başlatın
  • tmux oturumunu Ctrl + b ve ardından d
  • yazarak bırakın / çıkartın.

Artık güvenli bir şekilde uzak makineden çıkış yapabilirsiniz, işleminiz tmux içinde çalışmaya devam edecektir. Tekrar geri döndüğünüzde ve işleminizin durumunu kontrol etmek istediğinizde, tmux attach oturumunuza eklemek için tmux kullanabilirsiniz.

Birden çok oturumun yan yana çalışmasını istiyorsanız, her oturumu Ctrl + b ve $ kullanarak adlandırmanız gerekir. Şu anda çalışan oturumların bir listesini tmux list-sessions kullanarak, şimdi de tmux attach-session -t 0 komutuyla çalışan bir oturuma ekleyebilirsiniz.

tmux , tek bir oturumda tek bir pencereyi idare etmekten çok daha gelişmiş işler yapabilir. Daha fazla bilgi için man tmux veya tmux GitHub sayfasına bakın. Özellikle, screen ve tmux arasındaki ana farklar hakkında işte bir SSS .

    
verilen cevap tongpu 23.11.2012 10:26
213

En iyi yol genellikle en basit olanıdır.

nohup long-running-command &

Bunun için özel olarak yapıldı, hatta stdout'u nohup.log'a yazdı

man nohup

Halihazırda çalışan bazı görevleri "arka plan" yapmak istiyorsanız, en iyi seçeneğiniz ctrl + z komutunu çalıştırmaktır.

bg (bu, en son askıya alınmış görevinizi arka planda çalışmaya devam etmesine izin verecek)

sonra, çıkış yaptıktan sonra işlemi hızlı bir disown tutmaya devam etmelidir.

screen ve diğerleri bunu yapabilir, ancak bu onlar için değil. Önceden çalıştığınız ve yeniden başlatmak istemediğiniz görevler için geride bırakacağınız görevler için nohup , bg görevini öneririm.

Unutmayın, her ikisi de özeldir. Eğer bash kullanmıyorsanız, komutlar farklı olabilir.

    
verilen cevap coteyr 28.11.2012 03:58
179

Bunu screen kullanarak yapabilirsiniz.

Daha fazla bilgi edinmek için man screen yazın veya bu ekran görüntüleyici sayfasını okuyun .

Basit senaryo:

  • ssh, uzak kutunuza. % Co_de% yazın. Ardından istediğiniz işlemi başlatın.

  • Ctrl - A ardından Ctrl - D tuşlarına basın. Bu, ekran oturumunuzu "ayırır" ancak süreçlerinizi çalışır durumda bırakır. Artık uzak kutudan çıkış yapabilirsiniz.

  • Daha sonra tekrar gelmek isterseniz, tekrar giriş yapın ve screen yazın. Bu, ekran oturumunuzu "devam ettirecek" ve işleminizin çıktısını görebilirsiniz.

verilen cevap Lincoln 21.10.2010 14:20
72

Ekran ve nohup daha iyi bir yoldur, ancak ekran veya nohup olmadan çalışan bir süreci ayırmanız gerekiyorsa, disown komutunu çalıştırabilirsiniz.

  

disown [-ar] [-h] [ jobspec … | pid … ]

     

Seçenek olmadan, jobspec öğelerinin tümünü etkin işlerin tablosundan kaldırın. % Co_de% seçeneği belirtilmişse, iş tablodan kaldırılmaz, ancak kabuk SIGHUP alırsa SIGHUP öğeye gönderilmeyecek şekilde işaretlenir. jobspec mevcut değilse ve ne -h ne de -a seçeneği sağlanmadıysa, geçerli iş kullanılır. jobspec belirtilmezse, -r seçeneği tüm işleri kaldırmak veya işaretlemek anlamına gelir; jobspec argümanı içermeyen -a seçeneği, çalıştırılan işleri çalıştırmayı kısıtlar.

Disown ile terminali kapatabilir ve işlemin makinede çalışmasını sağlayabilirsiniz.

    
verilen cevap bassgey 21.10.2010 15:19
37

Büyük bir mvde sıkışmıştım, bu yüzden süreci durdurmak, kurulum ekranını açmak ve tekrar başlatmak için pozisyonda değildim. Ssh oturumundan, aşağıdaki adımları gerçekleştirerek çalışan süreçten çıkmayı başardım:

  1. ssh [sunucu]
  2. komut
  3. CTRL + Z
  4. bg
  5. disown
  6. exit

3. adım mevcut işlemi duraklatır (ör. 'mv' komutu). 4. Adım, duraklatılmış işlemi arka plana yerleştirir ve devam ettirir. Adım 5 işlemi reddetmenizi sağlar.

    
verilen cevap Chaos 25.11.2013 04:30
19

Programları ve terminal durumunu birden çok ssh bağlantısı üzerinden korumak için kullanabileceğiniz iki ana program vardır. Ekrandaydılar (görevli, ancak maalesef denetlenmedi. Görünüşe göre, şimdi şu anda aktif olarak geliştiriliyor ) ve tmux (daha yeni, aktif olarak bakım). Byobu, bu sistemlerin üstesinden gelebilecek ve ek ubuntu durum bilgisi sunan bir ön uçtur. Yeni kurulumlarda tmux'u bir arka uç olarak kullanacaksınız, eğer daha eski bir byobu kurulumuna sahipseniz ve mevcut bir konfigürasyonunuz varsa, önceki arka ucunu koruyacaksınız, ister ekran ister tmux olsun.

Byobu

Byobu, Debian tabanlı bir makinede bunu yaparak bilgisayara yüklenebilir:

sudo aptitude install byobu

Yum kullan, yaparsın

su -c 'yum install byobu'

Ayrıca, byobu'nu diğer dağıtımlarda da kurmak mümkündür.

byobu’yu kullanma

ssh kullanarak bağlandıktan sonra ana makinede byobu dosyasını çalıştırarak byobu başlatabilirsiniz. Bu size şöyle bir kabuk verecektir:

Ayrıca Byobu Terminalini -X seçeneğiyle bir Ubuntu makinesinde de kullanabilirsiniz ve kolayca mükemmel çalışan bir byobu'ya sahip olabilirsiniz.

Kullanım:

byobu yazarak byobu’yu başlatın.

Geçerli oturumda yeni bir pencere oluşturmak için F2'ye, çeşitli pencereler arasında geçiş yapmak için F3-F4'e basabilirsiniz.

Byobu'nun en iyi yanı, terminalden ayrılmak için terminalde çalışan işlemleri gerçekten öldürmek zorunda değilsiniz. Ekrana / tmux'a (byobu'nun iskeleti) arka plana gönderebilir ve bir dahaki sefere devam edebilirsiniz:

  • Byobu'dan ayrılmak ve koşmak (çıkartmak) için F6'ya basın.
  • Bir dahaki sefere, sadece byobu yapın ve bulunduğunuz yere geri dönün.

Ayrıca, byobu -S session1 gibi çeşitli byobu oturumları da oluşturabilirsiniz. Ve geri döndüğünüzde bunlardan birine bağlanabilirsiniz.

Byobu kullanarak daha fazlasını yapabilirsiniz. Kullan onu! Bazı kesin kılavuzlar burada , burada ya da burada .

    
verilen cevap SiddharthaRT 24.11.2012 23:09
16

İşlem başladıktan sonra bunu yapamazsınız, uzun süren bir işi çalıştırmadan önce işleri ayarlamanız gerekir.

nohup 'u kullanabilirsiniz. Ancak modern bilgelik, ekranınızı veya oturum açtığınız anda byobu kullanmanızı önerir. çalışan.

Ekran, bir makineden ayırabileceğiniz ve iş gününün bitimini aşan uzun süre çalışan süreçleri kontrol etmek istediğinizde kullanışlı olan bir diğerinden yeniden takabileceğiniz avantajına sahiptir.

Makul bir başlangıç ​​var Ekrana yönlendirme burada.

byobu ekranın üst kısmındaki menülerle kullanımı kolay bir arayüz oluşturur. Ayrıca yeni ubuntu üzerindeki ekranın güncel uygulaması. F2, F3 / F4 yeni bir terminali başlatmak için ileri geri ve F6 ile bağlantıyı keser. Son uç terminallere kalıcı olarak çıkış yapın.

    
verilen cevap Richard Holloway 21.10.2010 14:16
7

Hey, ekranın en etkili seçenek olduğuna katılıyorum. Vncserver'ı kullanabilir ve ardından işlemi başlatabilirsiniz.

Ayrıca, eğer tek sizin müdahaleleriniz işlemin devam etmesine ve kontrolünün geri alınmasına gerek duyulmuyorsa, ve en önemlisi, oturumu kapatmanız gerektiğinin farkındasınız ve işlemi zaten yürütüyorsunuz, Eğer kabuğun kabuğunu kullandıysan şansın şansı

Önce işlemi, Ctrl + Z ve ardından bg% 1 yazarak arka plana göndermeniz gerekir (sayı, iş numarasına göre değişir, genellikle 1'dir, ancak komut işlerini kullanarak listeyi kolayca çekebilirsiniz)

Sonunda komutu reddetti (ardından jobid ... bg komutuyla aynı şekilde)

Bu, kabuğunuz ve arka plandaki işlem arasındaki ebeveyn-çocuk ilişkisini kaldıracak ve kabuğunuz sonlandırıldığında ölmesini engelleyecektir.

    
verilen cevap Jorge Gutierrez 06.06.2011 23:29
7

Uzun bir süre boyunca çalıştığım tek bir kabuk komut dosyası için giriş yapacağım ve '& amp;' kullanarak arka planda işlemi çalıştıracağım.

Örnek:

/path/to/my/script &

Oturumu kapattım ve SSH oturumumu kestim. Bir süre sonra oturum açtığımda, betik hala komut dosyasından sürekli veri toplanmasıyla kanıtlandığı şekilde yürütülüyor.

    
verilen cevap user108430 29.07.2014 16:58
3

GNU Ekranına göz atmalı ve size yardımcı olup olmadığına bakın. Gerçek zamanlı olarak çalışabilmeniz için uygulamanıza nasıl ihtiyacınız olduğuna bağlı olarak, çözdüğünden daha fazla soruna neden olabilir, ancak en azından oturumunuzu hiç bırakmamış gibi devam ettirebilirsiniz.

Nasıl kullanılır?

  • İlk başlangıç ​​için screen komutunu kullanın, giriş mesajlarını kaydırın, bir terminal teslim edilmelidir.
  • C-a C-c başka bir terminal açar
  • C-a C-k bir terminali öldürür
  • Terminaller arasında geçiş yapmak için C-a C-Space ve C-a C-Backspace'ı kullanabilirsiniz
  • Çoğunlukla yalnızca iki terminal kullanıyorsanız C-a C-a kullanışlıdır
  • C-a C-d mevcut ekran oturumunu ayırır ve ekrandan çıkar. Daha sonra bu oturuma devam etmek için screen -r kullanabilirsiniz. Aynı anda birden fazla bağımsız ekran oturumuna sahip olabilirsiniz. Bu durumda, kullanılabilir oturumların bir listesi görüntülenir.

Diğer birçok seçenek vardır, örneğin bölünmüş ekranlar ve ayrıca tüm kısayollar tamamen özelleştirilebilir.

    
verilen cevap T. Verron 22.05.2012 17:31
2

En basit cevap ...

ctrl + z, çalışan programı askıya alacaktır

"bg" bunu arka planda çalıştırır

    
verilen cevap Roop 13.08.2013 02:28
2

En kolay yol, komutunuzu arka planda & ile çalıştırmaktır. Sonra sadece yaz:

disown -a
    
verilen cevap Zibri 11.01.2017 04:52
0

Herkes disown (işlemi zaten başlattıktan sonra sahip olduğunuz tek seçenek), nohup komutunu veya hatta screen komutunu çalıştırmayı söylüyorsa, bu da tüm çıktıları görmek istediğinizde kullanışlıdır. Komutanım ... screen hayranıyım .. Linux'un en yeni ana akım dağıtımlarını denedim ve işi arka planda bırakıp işten ayrılmak, ölmekte olan tüm süreçlere neden olmaz. Küresel bir ayar olmalı ya da bir şey olmalı. Bunu oldukça eski bazı sistemlerde deniyorum (slackware 12) ve test betiğim el ile öldürene kadar çalışmaya devam ediyor:

shell$ cat > test.pl

#!/usr/bin/perl
while(1){
     sleep(1);
}
    shell$ perl ./test.pl &
    shell$ exit
    logout
    shell$ ps aux test.pl
    mymom 31337     1  0 13:25 ?        00:00:00 perl ./test.pl
    shell$ 

Komut dosyanızın dosyaları veya herhangi bir dosyayı günlüğe yazması için yazmış olsa bile, screen 'nin bunu çalıştırmanın en iyi yolu olacağını kabul etmekteyim. disown -a veya nohup ' yi asla kullanmadığı sürece tam paranoya. Belki birileri bash'ın varsayılan olarak nasıl davrandığına biraz ışık tutabilir mi? Belki bazı sistem yöneticileri, kullanıcılarının süreçlerini sisteme aşırı yüklemeleri için büyük kabuklardaki varsayılanları değiştirir?

    
verilen cevap Dan Gullage 29.07.2015 19:42
-1

Bunun yerine:

cmd options; 

nohup önce ekle:

nohup cmd options & 

Ardından konsolun stdout'unu görebileceksiniz:

tail -f nohup.out
    
verilen cevap Abdennour TOUMI 22.10.2016 12:51

Etiketlerdeki diğer soruları oku