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
yazaraktmux
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:
- SSH bağlantısı kur:
ssh user@host
- İşlemi başlatmak için istediğiniz komutu çalıştırın
- Basın Ctrl+Z işlemi duraklatmak için
- Koşmak
bg
duraklatılmış işlemi arka plana koymak ve devam ettirmek için. - 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 yeterlidirjobs
önce. - Ç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:
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.
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.