Çalışan ekran oturumları nasıl listelenir?


233

Ben kullanarak deneyler çalıştırmak sunucuları bir demet var screen. Prosedür aşağıdaki gibidir:

  1. ssh XXX sunucusuna
  2. başlatmak screen
  3. birkaç sekmede deneme başlat
  4. ayırmak screen
  5. sunucu ile bağlantıyı kes

Deneyler çalışırken, sshtüm sunuculara girip çalışan işlemlerimi listeleyerek ( topveya kullanarak ps) hangi sunucularda olduklarını kolayca bulabilirim .

Ancak, denemeler bittikten sonra, hangi sunucularda bir ekran oturumu açtığımı nasıl bulabilirim (böylece çıktıya bir göz atabilir, onları yeniden başlatabilirim, vb.)?

Not: Deneylerim çıktılarını dosyalara da yazdırıyor ... ama bu benim sorumun konusu değil.

Yanıtlar:


420

Bir kullanıcının tüm ekran oturumlarını listelemek için, o kullanıcı olarak aşağıdaki komutu çalıştırın:

screen -ls

Belirli bir makinedeki tüm ekran oturumlarını görmek için şunları yapabilirsiniz:

ls -laR /var/run/screen/

Bunu makineme alıyorum:

gentle ~ # ls -laR /var/run/screen/

/var/run/screen/:
total 1
drwxrwxr-x  4 root utmp   96 Mar  1  2005 .
drwxr-xr-x 10 root root  840 Feb  1 03:10 ..
drwx------  2 josh users  88 Jan 13 11:33 S-josh
drwx------  2 root root   48 Feb 11 10:50 S-root

/var/run/screen/S-josh:
total 0
drwx------ 2 josh users 88 Jan 13 11:33 .
drwxrwxr-x 4 root utmp  96 Mar  1  2005 ..
prwx------ 1 josh users  0 Feb 11 10:41 12931.pts-0.gentle

/var/run/screen/S-root:
total 0
drwx------ 2 root root 48 Feb 11 10:50 .
drwxrwxr-x 4 root utmp 96 Mar  1  2005 ..

Bu, güvenlik, durum ve akışları işlemek için dosya sistemi izinlerine sarılmış Unix Soketlerinin oldukça parlak bir Unixy kullanımıdır.


1
Soruyu mükemmel cevaplayan bu cevabın neden bir aşağı oy aldığını merak ediyorum ...
Blaszard

Alternatif olarak, bir adlandırma kuralına dayalı olarak belirli bir ekran almak istiyorsanız, sonucu grep edebilirsiniz. ls -R /var/run/screen/S-root/ | grep "NamingConvention". Ekranlar <pid>.<screen_name>formatta kaydedilir. Bu, bash betikleri için kullanışlıdır. Bu nedenle 0000.NamingConvention, adı olan bir ekranınız varsa, tam olarak aradığınız ekranların adını ayrıştırması kolay bir biçimde döndürecektir.
Elias Ranz


13

Joshperry'nin cevabı doğru olsa da, ekran adını (-t seçeneği ile ayarladığınız) söylemediği için çok can sıkıcı buluyorum, aslında bir oturumu tanımlamak için kullandığınız şey bu. (onun hatası değil, elbette, bu bir ekran hatası)

Bu yüzden bunun gibi bir komut dosyası kullanıyorum: ps auxw|grep -i screen|grep -v grep


2
-S seçeneğine bir göz atın. Sağlanan değer unix soket dosya adında saklanır ve lsçıktıda görünür . İhtiyacınız olursa, -t seçeneğini de saklayabilirsiniz.
joshperry

-S seçeneği de harika, çünkü bu oturum adıyla devam etmenizi de sağlıyor:screen -rd <sessionname>
jorisw

7

Sorunuzdan tam olarak emin değilim, ancak gerçekten istediğiniz şey şu anda açık olan ekran oturumunu listeliyorsanız, deneyin:

screen -ls

6
 For windows system

 Open putty 
 then login in server

Konsolda ekranı görmek istiyorsanız, komut yazmanız gerekir

 Screen -ls

ekrana erişmeniz gerekiyorsa aşağıdaki komutu kullanmanız gerekir

 screen -x screen id

PWDŞu anda hangi klasörde olduğunuzu kontrol etmek için komut satırına yazın


3

Çoğu durumda bir screen -RRx $username/ irade yeterli :)

Yine de tüm ekranları listelemek istiyorsanız, aşağıdaki komut dosyasını yolunuza koyun ve ekrana veya istediğiniz her şeyi çağırın:

#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
    exec /usr/bin/screen "$@"
else
    shopt -s nullglob
    screens=(/var/run/screen/S-*/*)
    if (( ${#screens[@]} == 0 )); then
        echo "no screen session found in /var/run/screen"
    else
        echo "${screens[@]#*S-}"
    fi
fi

-Ls-all seçeneğini ilk parametre olarak verirken, tüm ekran oturumlarını göstermek dışında tam olarak ekran gibi davranacaktır.


3

Birden fazla kişi zaten

$ screen -ls

ekran oturumlarını listeler.

İşte size faydalı olabilecek başka bir numara.

Aşağıdaki komutu xxx sunucusundaki .bashrc dosyanıza son satır olarak eklerseniz, oturum açıldığında ekran oturumunuza otomatik olarak yeniden bağlanır.

screen -d -r

Umarım faydalı bulursunuz.


1
Ekranı başlatan aynı kullanıcı olarak oturum açmanız gerektiğini belirtmek isterim, ekran oturumumun gittiğinden endişelendim, ancak dosya kopyam kullanıcı "medyası" altında devam ediyordu. Kulağa mantıklı gelebilir, ancak denetlerseniz biraz panik kurtarabilir.
Paul

0

ps x | grep EKRAN

komutunu kullanmanız durumunda ekranın ne olduğunu görmek için

screen -A -m -d php Instagram Hesabındaki Resim ve Videoları make_something.php


-4

Denemelerin arka planda çalışmasını sağlamak için ekranı kullanıyorsunuz, ya da ne? Öyleyse, neden sadece arka planda başlatmıyorsunuz?

./experiment &

Ve yaptığım işi nasıl bildirim alacağınızı soruyorsanız, denemeyi bir posta komutuyla birlikte dizmeye ne dersiniz?

./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"

Denemeleri sonlandırmadan sunucuların bağlantısını kesebilmem için ekranı kullanıyorum. Soru, bildirimlerin nasıl alınacağı değil (postanın bunu yapmanın güzel bir yolu olabilir), ancak belirli bir makinenin açık bir ekran oturumu olup olmadığını nasıl bulacağımızdı. Cevabınız için yine de teşekkürler!
Wookai

Deneyimli bir sysadmin değilim, ancak sunucu işlemlerini çalıştırmak için ekranı kullanmak iyi çalışıyor: bir şeyler ters giderse, sadece bu pencereye fiske atabilir ve soruna yol açan tüm çıktıları görebilirsiniz - gerek yok günlük dosyalarını açmaya başlayın. Ayrıca ctrl + c ile bir işlemi kolayca öldürebileceğiniz anlamına gelir. Aynı hizmeti sık sık başlatıyorsanız ve kapatıyorsanız, tüm bunlar kullanışlı olur.
Steve Bennett
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.