Ssh oturumu sona erdikten sonra işlemler nasıl çalışır?

Bir ssh oturumundan bir sürü işlem başlattığımı varsayalım. Bu işlemleri uzak makinede çalıştırırken ssh oturumunu sonlandırmak mümkün mü?

Aşağıdaki gibi modern alternatifler aramalısınız tmux.

tmux üstündür screen birçok nedenden dolayı, işte sadece bazı örnekler:

  • Windows oturumlar arasında taşınabilir ve hatta birden çok oturuma bağlanabilir
  • Pencereler yatay ve dikey olarak bölmelere ayrılabilir
  • UTF-8 ve 256 renkli terminaller için destek
  • Oturumlar, bir oturuma girmeye gerek kalmadan kabuktan kontrol edilebilir

Temel İşlevsellik

Açıklandığı gibi aynı işlevselliği elde etmek için cevap önerme screen, aşağıdakileri yapmanız gerekir:

  • uzak makineye ssh
  • Başla tmux yazarak tmux kabuğun içine
  • başlatılmış içinde istediğiniz işlemi başlatın tmux oturum
  • bırakın / ayırın tmux yazarak oturum Ctrl+b ve sonra d

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

Yan yana çalışan birden çok oturuma sahip olmak istiyorsanız, her oturuma aşağıdakileri kullanarak ad vermelisiniz Ctrl+b ve $. Şu anda çalışmakta olan oturumların listesini kullanarak alabilirsiniz tmux list-sessions, şimdi komutla çalışan bir oturuma ekle tmux attach-session -t <session-name>.

tmux tek bir oturumda tek bir pencereyi ele almaktan çok daha gelişmiş şeyler yapabilir. Daha fazla bilgi için bir göz atın man tmux veya tmux GitHub sayfası. Özellikle, işte bir SSS arasındaki temel farklar hakkında screen ve tmux.

Seçenek 1: nohup

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

nohup long-running-command &

Bunun için özel olarak yapıldı, hatta stdout'u günlüğe kaydeder nohup.log.

man nohup

Seçenek 2: bg + disown

ctrl+zbgdisown -h

Zaten çalışan görevleri "arka plan" istiyorsanız, o zaman Ctrl+Z sonra koş bg en son askıya alınmış görevinizi arka plana koyarak çalışmaya devam etmesine izin vermek için. disown oturumu kapattıktan sonra işlem çalışmaya devam eder. Bu -h bayrak kapanmayı önler.


screen ve diğerleri bunu yapabilir, ama bunun için değiller. Tavsiye ederim nohup geride bırakacağınızı bildiğiniz görevler için ve bg zaten çalışmakta olduğunuz ve yeniden başlatmak istemediğiniz görevler için.

Her ikisinin de bash'a özgü olduğunu unutmayın. Bash kullanmıyorsanız, komutlar farklı olabilir.

Bunu kullanarak yapabilirsiniz screen.

Tip man screen daha fazla bilgi edinmek veya bunu okumak için ekran adam sayfası.

Basit senaryo:

  • uzak kutunuza ssh. Tip screen Ardından istediğiniz işlemi başlatın.

  • Basın Ctrl-A sonra Ctrl-D. Bu, ekran oturumunuzu "ayırır" ancak işlemlerinizi çalışır durumda bırakır. Artık uzak kutudan çıkış yapabilirsiniz.

  • Daha sonra tekrar gelmek isterseniz, tekrar oturum açın ve şunu yazın: screen -r Bu, ekran oturumunuzu "devam ettirir" ve işleminizin çıktısını görebilirsiniz.

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

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

Seçenekler olmadan, her birini kaldırın jobspecname aktif işler tablosundan. Eğer... -h seçenek verilir, iş tablodan kaldırılmaz, ancak kabuk bir SIGHUP alırsa SIGHUP işe gönderilmeyecek şekilde işaretlenir. Eğer jobspecname ne mevcut ne de mevcut değil. -a ne de -r seçenek verilir, geçerli iş kullanılır. Hayır ise jobspecname tedarik edilir, -a seçenek, tüm işleri kaldırmak veya işaretlemek anlamına gelir; -r a olmadan seçenek jobspecname bağımsız değişken, işlemi çalışan işlerle sınırlandırır.

Disown ile terminali kapatabilir ve işlemi makinede çalıştırabilirsiniz.

Büyük bir mv'de sıkışıp kaldım, bu yüzden işlemi durduracak, ekranı ayarlayacak ve tekrar başlatacak konumda değildim. Esasen aşağıdaki adımları uygulayarak çalışan işlemle SSH oturumundan çıkmayı başardım:

  1. SSH bağlantısı kur: ssh user@host
  2. İşlemi başlatmak için istediğiniz komutu çalıştırın
  3. Basın Ctrl+Z işlemi duraklatmak için
  4. Koşmak bg duraklatılmış işlemi arka plana koymak ve devam ettirmek için.
  5. Koşmak disown [pid] (işlem kimliği isteğe bağlıdır, varsayılan değer son işlemdir) işlemi reddetmek için kullanılır. İşlerin bir listesini almak için şunu yazmanız yeterlidir jobs önce.
  6. Çalıştırarak SSH oturumundan çıkın logout.

Kullanımı disown komut:

disown [-ar] [-h] [jobspec ... | pid ... ]              Without  options,  remove  each jobspec from the table of active              jobs.  If jobspec is not present, and neither the -a nor the  -r              option  is  supplied, the current job is used.  If the -h option              is given, each jobspec is not removed from  the  table,  but  is              marked  so  that  SIGHUP  is  not  sent  to the job if the shell              receives a SIGHUP.  If no jobspec is  supplied,  the  -a  option              means  to  remove or mark all jobs; the -r option without a job‐              spec argument restricts operation to running jobs.   The  return              value is 0 unless a jobspec does not specify a valid job.

Birden çok ssh bağlantısı üzerinden programları ve terminal durumunu korumak için kullanabileceğiniz iki ana program vardır. Onlar perde (görevdeki, ama ne yazık ki unmaintained. Anlaşılan şu anda aktif olarak geliştiriliyor) ve tmux (daha yeni, aktif olarak korunur). Byobu, bu sistemlerin üstünde çalışabilen ve ek ubuntu durum bilgisi sunan bir ön uçtur. Yeni kurulumlarda tmux'u arka uç olarak kullanacak, daha eski bir byobu kurulumunuz ve mevcut bir yapılandırmanız varsa, ekran veya tmux olsun, önceki arka ucu koruyacaktır.

Byobu.KGM

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

sudo aptitude install byobu

Yum kullanarak, yaparsın

su -c 'yum install byobu'

Byobu'yu diğer dağıtımlara yüklemek de mümkündür.

Byobu'yu kullanma

Byobu'ya koşarak başlayabilirsiniz byobu ssh kullanarak bağlandıktan sonra ana makinede.Bu size şuna benzeyen bir kabuk verecektir:

image-byobu

Byobu Terminalini -X seçenekli bir Ubuntu makinesinde de kullanabilir ve kolayca mükemmel çalışan bir byobu'ya sahip olabilirsiniz.

Kullanım:

Yazarak byobu'ya başlayın byobu.

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

Byobu ile ilgili en iyi bölüm, terminalden ayrılmak için terminalde çalışan işlemleri gerçekten öldürmek zorunda olmamanızdır. Ekranı / tmux'u (byobu'nun iskeleti) arka plana gönderebilir ve bir dahaki sefere geldiğinizde devam edebilirsiniz:

  • Byobu'dan ayrılmak ve çalışmasını sağlamak için F6 tuşuna basın.

  • Bir dahaki gelişinde, sadece yap byobu ve olduğun yere geri dönmelisin.

    byobu-detach-attach

Ayrıca çeşitli byobu oturumları oluşturabilirsiniz byobu -S session1 ve benzeri. Ve geri döndüğünde ikisine de bağlanabilirsin.

Byobu'yu kullanarak çok daha fazlasını yapabilirsiniz. Kullan onu!Bazı kesin kılavuzlar şunlardır burada, veya burada.

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

Kullanabilirsiniz hayırhup ancak modern bilgelik, ekranı veya byobu'yu girişiniz olarak kullanmanızı önerir, böylece işleri ayırabilir ve bırakabilirsiniz.

Ekran, bir makineden ayrılabilme ve diğerinden yeniden takılabilme avantajına sahiptir; bu, iş gününün sonunun ötesinde çalışan uzun süren işlemleri kontrol etmek istiyorsanız kullanışlıdır.

Makul bir başlangıç var ekran kılavuzu burada.

byobu.kgm menüler vb. İle ekranın üstüne kullanımı kolay bir arayüz koyar. Aynı zamanda yeni ubuntu'da ekranın mevcut uygulamasıdır. F2 yeni bir terminal başlatmak için F3 / F4 ileri geri geçiş yapmak için F6 bağlantısını kesmek için. Terminalleri kalıcı olarak sonlandırmak için exit yazın.

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

Örnek:

/path/to/my/script &

Oturumu kapattım ve SSH oturumumun bağlantısını kestim. Bir süre sonra oturum açtığımda, komut dosyası komut dosyasından sürekli veri toplama ile kanıtlandığı gibi yürütülmeye devam ediyor.

Hey, ekranın en etkili seçenek olduğunu kabul ederken.Vncserver'ı kullanabilir ve üzerinde işlemi başlatabilirsiniz.

Ayrıca, tek ilginiz işlemin çalışmasını sağlamak ve kontrolü geri almanıza gerek kalmamasıysa ve en önemlisi oturumu kapatmanız gerekeceğinin farkında değildiniz ve zaten çalışmakta olan işleminiz varsa, şansınız yaver gitmez kabuk olarak bash kullandıysanız

Önce Ctrl+Z ve ardından bg %1 yazarak işlemi arka plana göndermeniz gerekir (sayı iş numarasına bağlıdır, genellikle 1'dir, ancak işleri komutunu kullanarak listeyi kolayca çekebilirsiniz)

Son olarak disown komutunu (ardından jobıd komutunu) çağırın... bg komutuyla aynı)

Bu, kabuğunuz ile arka plandaki işlem arasındaki üst-alt ilişkiyi kaldıracak ve kabuğunuz sonlandırıldığında ölmesini önleyecektir.

Kontrol etmelisin. GNU Ekranı bakalım sana yardımı olacak mı. Uygulamanızın gerçek zamanlı olarak çalışmasına nasıl ihtiyaç duyduğunuza bağlı olarak, çözdüğünden daha fazla soruna neden olabilir, ancak en azından oturumunuzu hiç bırakmamış gibi devam ettirmenize izin verir.

Nasıl kullanılır :

  • Komutu kullan screen ilk başlangıç için, giriş mesajları arasında ilerleyin, 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 sadece iki terminal kullanıyorsanız, C-a C-a kullanışlıdır
  • C-a C-d geçerli ekran oturumunu ayırır ve ekranlardan çıkar. Daha sonra kullanabilirsiniz screen -r seansa devam etmek için. Aynı anda birkaç ayrı ekran oturumunuz olabilir, bu durumda kullanılabilir oturumların bir listesi görüntülenir.

Bölünmüş ekranlar gibi birçok seçenek daha vardır ve ayrıca tüm kısayollar tamamen özelleştirilebilir.

İlgili: How can I run a command which will survive terminal close? - Unix & Linux Stack Exchange