Diyelim ki ssh oturumundan bir sürü işlem başlattım. Uzak makinede bu işlemleri sürdürürken ssh oturumunu sonlandırmak mümkün müdür?
Diyelim ki ssh oturumundan bir sürü işlem başlattım. Uzak makinede bu işlemleri sürdürürken ssh oturumunu sonlandırmak mümkün müdür?
Yanıtlar:
Bunun gibi modern alternatifler aramalısınız tmux
.
tmux
screen
birçok nedenden ötürü üstündür , işte bazı örnekler:
Tavsiye cevabında açıklandığı gibi aynı işlevselliği elde etmek screen
için aşağıdakileri yapmanız gerekir:
tmux
yazarak başlayıntmux
tmux
oturumda istediğiniz işlemi başlatmaktmux
yazarak oturumu Ctrl+ bsonra ved Artık uzaktaki makineden güvenle oturum açabilirsiniz, işleminiz içeride çalışmaya devam eder tmux
. Tekrar geri döndüğünüzde ve işleminizin durumunu kontrol etmek istediğinizde oturumunuza tmux attach
eklemek için kullanabilirsiniz tmux
.
Yan yana çalışan birden çok oturum yapmak istiyorsanız, her oturumu Ctrl+ bve ile adlandırmanız gerekir $
. Şu anda çalışan oturumların bir listesini kullanarak tmux list-sessions
, şimdi çalışan bir oturuma komutu ile ekleyin tmux attach-session -t 0
.
tmux
Tek bir oturumda tek bir pencereyi ele almaktan çok daha gelişmiş şeyler yapabilir. Daha fazla bilgi için bakınız man tmux
veya tmux GitHub sayfasına . Özellikle, iştescreen
ve arasındaki ana farklar hakkında bir SSStmux
.
screen -x -r [screenname]
veya kullanın screen -rx
. Bu, mevcut bir ekran örneğini eklemenizi sağlar.
Ctrl-b
sonra ve d
/ terk ayırmak amacıyla tmux
oturumu. Tabii ki bu tmux
Ubuntu 12.04 sürümüm için de geçerlidir.
tmux detach
yazmak yerine koşctrl-b d
nohup
En iyi yol genellikle en basittir.
nohup long-running-command &
Özellikle bunun için yapıldı, hatta stdout'u günlüğe kaydeder nohup.log
.
man nohup
bg
Zaten çalışan bazı görevlerin "arkaplanını" yapmak istiyorsanız, en iyi seçeneğiniz Ctrl+ Zsonra koşmaktır.
bg
en son askıya alınmış görevinizi arka plana koymak ve çalışmaya devam etmesini sağlamak için.
Daha sonra hızlı bir şekilde disown
oturumu kapattıktan sonra işlem devam etmelidir.
screen
ve diğerleri yapabilir, ama bunun için değil. nohup
Geride bırakacağınızı bildiğiniz bg
görevler için ve halen devam etmekte olduğunuz ve yeniden başlamak istemediğiniz görevler için öneririm .
Unutmayın, her ikisi de bash'a özgüdür. Bash kullanmıyorsanız, komutlar farklı olabilir.
disown -h
bg
+ disown
benim için işe yaramadı. Ben tmux içinde başlatmayı unuttum ve bir toplantı için erken ayrılmak gerekiyordu çalışan bir dağıtım komut dosyası vardı. Komut sürekli olarak kabuk için ilerleme verir. ctrl+z
işlemi durdurdu, beni bash'a geri verdi. bg
Süreci yeniden başlattı, ancak aynı zamanda statüyü bash olarak çıkardı ve ne yazdığımı görmeyi imkansız hale getirdi. Ancak, bir disown
komut üretti "disown: current: böyle bir iş yok"
julia myFile.jl
için ne sebeple işe yaramadı . tmux yapar ve harikadır.
Bunu kullanarak yapabilirsiniz screen
.
Tip man screen
daha fazla bilgi edinmek veya bu okumayı ekran adam sayfasını .
Basit senaryo:
Uzak kutunuza ssh. Yaz screen
Sonra, istediğiniz işlemi başlatın.
Basın Ctrl- Ao Ctrl- D. Bu, ekran oturumunuzu "ayıracak" ancak işlemlerinizi çalışır halde bırakacaktır. Artık uzaktaki kutudan çıkış yapabilirsiniz.
Daha sonra geri gelmek isterseniz, tekrar oturum açın ve screen -r
Bu, ekran oturumunuzu "devam ettirecek" şeklinde yazın ve işleminizin çıktısını görebilirsiniz.
screen -S name
doğru olana daha kolay bağlanmayı kolaylaştırmak için kullanarak adlandırırım .
screen -S
önce ayrılıp screen -r
geri gelirken inanılmaz!
Ekran ve nohup daha iyi bir yoldur, ancak zaten ekran olmadan çalışan bir işlemi ayırmak zorunda kalırsanız ya da nohup disown komutunu çalıştırabilirsiniz.
disown [-ar] [-h] [
jobspec
… |
pid
… ]
Seçenekler olmadan, her iş parçasını etkin iş tablosundan kaldırın . Eğer
-h
seçenek verilmiş iş tablodan kaldırılmaz, ancak kabuk bir SIGHUP alırsa o SIGHUP iş gönderilmez böylece işaretlenir. Eğer jobspec mevcut değildir ve ne-a
de-r
seçenek verilir, mevcut iş kullanılmaktadır. Hiçbir iş belirtilmezse ,-a
seçenek tüm işleri kaldırmak veya işaretlemek anlamına gelir;-r
Bir olmaksızın seçenek jobspec argüman işleri çalıştırma için operasyon kısıtlar.
Disown ile terminali kapatabilir ve işlemi makinede çalıştırabilirsiniz.
disown -a && exit
disown
ve onu öldürdü.
Büyük bir mv'ye takıldım ve süreci durduracak, kurulum ekranını ayarlayıp tekrar başlatacak konumda değildim. Esasen aşağıdaki adımları izleyerek çalışan ssh oturumundan çıkmayı başardım:
Adım 3 mevcut işlemi duraklatır (örneğin, 'mv' komutum).
Adım 4 duraklatılmış işlemi arka plana yerleştirir ve devam ettirir.
5. Adım, işlemden vazgeçmenizi sağlar. ** İşlerin listesini almak için jobs
önce basitçe yazın .
** Yoksunluk hakkında (bash el kitabından):
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.
disown
yerleşik komut en son arka plan işine göre hareket eder.
Birden fazla ssh bağlantısı üzerinden programları ve terminal durumunu korumak için kullanabileceğiniz iki ana program vardır. Bunlar ekran (görevliler ama maalesef bakımsız. Görünüşe göre aktif olarak geliştiriliyorlar ) ve tmux (daha yeni, aktif olarak bakılıyorlar). Byobu bu sistemlerin üzerinde çalışabilen ve ek ubuntu durum bilgisi sunan bir ön uç. Yeni kurulumlarda, tmux'u arka uç olarak kullanacak, eğer daha eski bir byobu kurulumuna sahipseniz ve mevcut bir konfigürasyon önceki ekrana bakacak olursa, ister ekran ister tmux olsun.
Byobu, Debian tabanlı bir makinede bunu yaparak bilgisayara kurulabilir:
sudo aptitude install byobu
Yum kullanarak
su -c 'yum install byobu'
Byobu'yu diğer dağıtımlara kurmak da mümkündür.
Byobu komutunu byobu
ssh kullanarak bağlandıktan sonra ana bilgisayarda çalıştırarak başlatabilirsiniz . Bu size şöyle görünen bir kabuk verecektir:
Ayrıca Byobu Terminalini -X seçeneğine sahip bir Ubuntu makinede kullanabilir ve kolayca çalışabilen bir byobu kullanabilirsiniz.
Yazarak byobu başlatı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'nun en iyi yanı, terminalden ayrılmak için terminalde çalışan işlemleri gerçekten öldürmek zorunda olmamanızdır. Basitçe ekrana / tmux'a (byobu'nun iskeleti) gönderebilir ve bir dahaki sefere devam edebilirsiniz:
Gelecek sefere, sadece yap byobu
ve bulunduğun yere geri dönmelisin.
Ayrıca byobu -S session1
ve benzeri çeşitli byobu oturumları oluşturabilirsiniz . Ve geri döndüğünüzde ikisine de bağlanabilirsiniz.
Byobu kullanarak çok daha fazlasını yapabilirsiniz. Kullanın! Bazı kesin kılavuzlar burada veya burada .
İşlem başladıktan sonra bunu yapamazsınız, uzun süren bir işi yapmadan önce bir şeyler ayarlamanız gerekir.
Nohup kullanabilirsiniz, ancak modern bilgelik giriş yaptığınız için ekranı veya byobu kullanmanızı önerir, böylece işleri koparabilir ve bırakabilirsiniz.
Ekran, bir makineden ayırabilir ve çalışma gününün sonundan uzun süren uzun süren işlemleri kontrol etmek istiyorsanız kullanışlı olan başka bir makineye yeniden bağlayabilme avantajına sahiptir.
Burada taramak için makul bir başlangıç kılavuzu var.
byobu menüler vb. ile ekranın üst kısmına kullanımı kolay bir arayüz koyar. Yeni bir F3 / F4 terminali başlatmak için F2, ileri geri geçiş yapmak ve F6'nın bağlantısını kesmek için. Gerçekten terminalleri kalıcı olarak sonlandırmak için exit yazın.
disown
başarmak için kullanabilirsiniz . @ Bassgey'in cevabını görün
disown
ve sadece gerekirse Ctrl-z
, o zaman bg
aktif terminalden ve arka plandan elde etmek için. Öyleyse disown
.
Hey, ekranın en etkili seçenek olduğuna karar verdim. Vncserver'ı kullanabilir ve ardından işlemi başlatabilirsiniz.
Ayrıca, tek müdahaleniz sürecin devam etmesi ve denetimin geri alınması gerekmiyorsa ve en önemlisi, oturumu kapatmanız gerekeceğinin ve işlemin zaten devam etmesinin farkında olmamanızdan çok daha önemliyse, kabuk olarak bash kullandın
Öncelikle Ctrl + Z yazıp ardından bg% 1 yazarak işlemi arka plana göndermeniz gerekir (sayı iş numarasına bağlıdır, genellikle 1'dir, ancak komut işlerini kullanarak listeyi kolayca çekebilirsiniz)
Sonunda emir komutunu çağırın (ardından jobid… bg komutunda olduğu gibi)
Bu, kabuğunuzla arka plandaki işlem arasındaki ebeveyn-çocuk ilişkisini kaldırarak kabuğunuzun sonlandırıldığı sırada ölmesini önler.
screen
, soru giriş sonrası olayı, şimdi giriş yaptıktan sonra ve başlamadan önce işlemlerin nasıl devam ettirileceği olarak verildi. Harika cevap Jorge, bana gerçekten yardım ettin! :)
bg
(olmadan %1
) çoğu zaman yeterlidir, çünkü varsayılan iş şu anki iş
Uzun bir süredir çalıştığım tek bir kabuk betiği için oturum açacağım ve '&' kullanarak işlemi arka planda çalıştıracağım.
Örnek:
/path/to/my/script &
SSH oturumumu kapattım ve bağlantım kesildi. Bir süre sonra oturum açtığımda, komut dosyası, komut dosyasından sürekli veri toplamanın kanıtladığı gibi hala yürütülüyor.
&
SSH oturumunuzda çalıştırırsanız , işlem hala devam eder, ancak işlemin çıktısını göremezsiniz (betiğiniz sizden bir şey çıkardıysa) görmeyecek, ancak eğer bir dosya
GNU Ekranını kontrol etmeli ve size yardımcı olup olmadığına bakmalısınız . Uygulamanın gerçek zamanlı olarak nasıl çalışması gerektiğine bağlı olarak, çözdüğünden daha fazla soruna neden olabilir, ancak en azından hiç bırakmamışsınız gibi oturumunuza devam etmenize izin verir.
Nasıl kullanılır :
screen
İlk çalıştırma komutunu kullanın, giriş mesajlarını kaydırın, bir terminal vermeniz gerekir.screen -r
o oturuma devam etmek için kullanabilirsiniz . Aynı anda birkaç ayrı ekran oturumunuz olabilir, bu durumda mevcut oturumların bir listesi görüntülenir.Örneğin bölünmüş ekranlar gibi başka birçok seçenek vardır ve tüm kısayollar tamamen özelleştirilebilirdir.
En basit cevap ...
ctrl + z çalışan programı askıya alır
"bg" arka planda çalışacak
disown
veya benzeri bir şeyle nohup
), bu genellikle süreci SSH oturumunun bitiminden sonra sürdürmez.
Herkes kullanmaya disown
başladığını söylese de (işlemi başlattıktan sonra sahip olduğunuz tek seçenek), nohup
hatta komutu çalıştırıyorsanız, komuttaki screen
tüm çıktıyı görmek istiyorsanız kullanışlıdır ... screen
.. Hala Linux'un en yaygın ana dağıtımlarını denedim ve işi sadece arkaplana koymak ve istifa etmek, çalışan tüm süreçlerin ölmesine neden olmuyor. Küresel bir ortam ya da bir şey olmalı. Bunu bazı eski sistemlerde (slackware 12) deniyorum ve test komut dosyam 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$
Ben kabul ederken o screen
benim komut dosyalarını ya da her neyse .. ben kullanmaya hiç gerek olmadı günlüğe yazdım bile, bu çalıştırmak için en iyi yol olacağını disown -a
ya nohup
da tam paranoya dışında olduğu sürece. Belki birileri bash'ın varsayılan olarak nasıl davrandığına ışık tutabilir? Belki de bazı sistem yöneticileri, kullanıcılarının işlemlerinin sistemi aşırı yüklemesini engellemek için varsayılan olarak büyük mermilerde değişiklik yapıyor?
Ne yazık ki, sonlandırılmış bir SSH oturumu smokin veya ekranın ölmesine neden olabilir. Bunun nedeni systemd
, oturumdan çıktıktan sonra tüm alt işlemlerini sonlandıracağıdır.
Bu ayarı logind.conf
( /etc/systemd/logind.conf
) öğesinden değiştirebilirsiniz :
KillUserProcesses=no
Https://unix.stackexchange.com/questions/490267 adresindeki cevabınız için teşekkürler .
Onun yerine :
cmd options;
Önce ekle nohup
:
nohup cmd options &
Ardından, konsol stdout'unu aşağıdakiler aracılığıyla görebileceksiniz:
tail -f nohup.out