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?
tmux gibi modern alternatifler aramalısınız.
tmux, birçok nedenden dolayı
screen'den daha üstündür, işte bazı örnekler:
answer önerildiği gibi
screen ile aynı işlevselliği elde etmek için aşağıdakileri yapmanız gerekir:
tmuxyazarak
tmuxkomutunu başlatın.
tmuxoturumunda istediğiniz işlemi başlatın
tmuxoturumunu yazarak bırakın/ayırın Ctrl+b ve sonra d
Artık uzaktaki makineden güvenle oturum açabilirsiniz, işleminiz
tmux içinde devam eder. Tekrar geri döndüğünüzde ve işleminizin durumunu kontrol etmek istediğinizde,
tmux oturumunuza eklemek için
tmux attach kullanabilirsiniz.
Yan yana çalışan birden çok oturum yapmak istiyorsanız, her oturumu kullanarak adlandırmanız gerekir. Ctrl+b ve
$. Halen çalışan oturumların bir listesini
tmux list-sessions kullanarak alabilirsiniz, şimdi çalışan bir oturuma
tmux attach-session -t 0 komutuyla ekleyin.
tmux, tek bir oturumdaki tek bir pencereyi ele almaktan çok daha gelişmiş şeyler yapabilir. Daha fazla bilgi için
man tmux veya tmux GitHub sayfası bölümüne bakın. Özellikle, burada bir SSS
screen ile
tmux arasındaki ana farklar hakkında.
Nohup
En iyi yol genellikle en basittir.
Nohup long-running-command &
Özellikle bunun için yapıldı, stdout'u
Nohup.log için bile kaydediyor.
man Nohup
bg
Zaten çalışan bazı görevlerin "arkaplanını" yapmak istiyorsanız, en iyi seçeneğiniz Ctrl+Z o zaman koş
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
disown, oturumu kapattıktan sonra işlemin devam etmesini sağlamalıdır.
screen ve diğerleri bunu yapabilir, ancak bunun için değil. Geride bırakacağınızı bildiğiniz görevler için
Nohup ve zaten çalışmakta olduğunuz ve yeniden başlatmak istemediğiniz görevler için
bg öneririz.
Unutmayın, her ikisi de bash'a özgüdür. Bash kullanmıyorsanız, komutlar farklı olabilir.
Bunu
screen kullanarak yapabilirsiniz.
Daha fazla bilgi edinmek veya bunu okumak için
man screen yazın. ekran sayfası .
Basit senaryo:
uzak kutunuza ssh.
screen yazın. Sonra istediğiniz işlemi başlatın.
Basın Ctrl-A sonra 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 dönmek istiyorsanız, tekrar oturum açın ve
screen -r yazın. Bu, ekran oturumunuzu "devam ettirecek" ve işleminizin çıktısını görebilirsiniz.
Screen ve Nohup daha iyi bir yoldur, ancak zaten ekran olmadan çalışan bir işlemi veya Nohup'u kaldırmak zorunda kalırsanız, disown komutunu çalıştırabilirsiniz.
disown [-ar] [-h] [
jobspec
… |
pid
… ]
Seçenekler olmadan, her bir jobspec etkin iş tablosundan kaldırın.
-hseçeneği verilirse, iş tablodan kaldırılmaz, ancak Shell bir SIGHUP alırsa SIGHUP işe gönderilmeyecek şekilde işaretlenir. jobspec mevcut değilse ve ne
-ane de
-rseçeneği belirtilmezse, geçerli iş kullanılır. Hayır jobspec belirtilirse,
-aseçeneği tüm işleri kaldırmak veya işaretlemek anlamına gelir;
-rseçeneği jobspec bağımsız değişkeni olmadan çalışan işleri sınırlandırır.
Disown ile terminali kapatabilir ve işlemi makinede çalıştırabilirsiniz.
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şlemi iptal etmenizi sağlar.** İşlerin listesini almak için, önce
jobs _ yazın.
** Yıkılma ile ilgili olarak (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.
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ızlar. Görünüşe göre şu anda aktif olarak geliştiriliyor ) ve tmux (daha yeni, aktif olarak bakılıyor). 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.
Ssh kullanarak bağlandıktan sonra ana makinede
byobu komutunu kullanarak byobu uygulamasını başlatabilirsiniz. Bu size şöyle görünen bir Shell verecek:
Ayrıca Byobu Terminalini -X seçeneğine sahip bir Ubuntu makinede kullanabilir ve kolayca çalışabilen bir byobu kullanabilirsiniz.
Byobu ile
byobu yazarak başlayın.
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:
Bir dahaki sefere geldiğinde, sadece
byobu yapın ve olduğunuz yere geri dönmelisiniz.
Ayrıca, çeşitli byobu oturumları
byobu -S session1 vb. İle oluşturabilirsiniz. Ve geri döndüğünüzde ikisine de bağlanabilirsiniz.
İş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 gibi ekran veya byobu kullanmanızı önerir, böylece işleri ayırabilir ve bırakabilirsiniz.
Ekran, bir makineden ayırabilir ve çalışma gününün sonundan daha 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 makul bir başlangıç ekran kılavuz var.
byob , menüleri vb. ekranın üst kısmına kolay kullanımlı 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.
Uzun bir süredir çalıştığım tek bir Shell betiği için oturum açacağım ve işlemi '&' kullanarak 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.
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, Shell'i 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, Shell'iniz ile arka plandaki işlem arasındaki ebeveyn-çocuk ilişkisini kaldıracak ve Shell'iniz sona erdiğinde ölmesini önleyecektir.
Kontrol etmelisin GNU Screen ve sana yardım edip etmediğini gör. 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 :
screenkomutunu kullanın, giriş mesajlarını kaydırın, bir terminale yönlendirilmelisiniz.
screen -rkullanabilirsiniz. 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
En kolay yol komutunuzu
& ile arka planda çalıştırmaktır. O zaman sadece yaz:
disown -a
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şlemleri sonlandıracaktır.
Bu ayarı
logind.conf (
/etc/systemd/logind.conf) içinden değiştirebilirsiniz:
KillUserProcesses=no
Cevabınız için teşekkürler https://unix.stackexchange.com/questions/490267 .
Herkes
disown (işlemi başlattıktan sonra sahip olduğunuz tek seçenek),
Nohup, hatta komutu komutun tüm çıktısını görmek istemeniz durumunda kullanabileceğiniz faydalı olan
screen'de kullanmanız gerektiğini söylese de ...
screen hayranıyım .. Linux'un en yaygın mainstream dağıtımlarını hala denedim ve sadece işi arkaplana koymak ve işten çıkmak tüm çalışanların ö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$
Her ne kadar
screen öğesinin bu dosyayı çalıştırmanın en iyi yolu olacağı konusunda hemfikir olmama rağmen, komut dosyam günlük dosyalarına yazdıysam veya herhangi bir şekilde yazdıysa bile .. Paranomun tamamen dışında olmadığı sürece
disown -a veya
Nohup kullanmaya hiç ihtiyacım olmadı. 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?