Wie liste ich laufende Bildschirmsitzungen auf?


232

Ich habe eine Reihe von Servern, auf denen ich Experimente durchführe screen. Das Verfahren ist wie folgt:

  1. ssh zum Server XXX
  2. starten screen
  3. Starten Sie die Experimente in wenigen Registerkarten
  4. ablösen screen
  5. Trennen Sie die Verbindung zum Server

Während die Experimente ausgeführt werden, kann ich leicht herausfinden, auf welchen Servern sie sich befinden, indem ich sshauf alle Server gehe und meine laufenden Prozesse aufführe (mit topoder ps).

Wie kann ich jedoch nach Abschluss der Experimente feststellen, auf welchen Servern eine Bildschirmsitzung geöffnet ist (damit ich mir die Ausgabe ansehen, sie neu starten usw. kann)?

PS: Meine Experimente drucken ihre Ausgabe auch in Dateien ... aber das ist nicht der Punkt meiner Frage.

Antworten:


419

Führen Sie den folgenden Befehl als dieser Benutzer aus, um alle Bildschirmsitzungen für einen Benutzer aufzulisten:

screen -ls

So zeigen Sie alle Bildschirmsitzungen auf einem bestimmten Computer an:

ls -laR /var/run/screen/

Ich bekomme das auf meine Maschine:

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 ..

Dies ist eine brillante Unixy-Verwendung von Unix-Sockets, die in Dateisystemberechtigungen eingeschlossen sind, um Sicherheit, Status und Streams zu verarbeiten.


1
Ich frage mich, warum diese Antwort, die die Frage perfekt beantwortete, eine negative Bewertung erhielt ...
Blaszard

Wenn Sie alternativ einen bestimmten Bildschirm basierend auf einer Namenskonvention erhalten möchten, können Sie das Ergebnis abrufen. ls -R /var/run/screen/S-root/ | grep "NamingConvention". Bildschirme werden im <pid>.<screen_name>Format gespeichert. Dies ist nützlich für Bash-Skripte. Wenn Sie also einen Bildschirm mit Namen 0000.NamingConventionhaben, wird der Name der gesuchten Bildschirme buchstäblich in einem einfach zu analysierenden Format zurückgegeben.
Elias Ranz


13

Obwohl die Antwort von joshperry richtig ist, finde ich es sehr ärgerlich, dass sie Ihnen nicht den Bildschirmnamen sagt (den, den Sie mit der Option -t festgelegt haben), sondern den Sie tatsächlich verwenden, um eine Sitzung zu identifizieren. (natürlich nicht seine Schuld, das ist ein Fehler des Bildschirms)

Deshalb verwende ich stattdessen ein Skript wie das folgende: ps auxw|grep -i screen|grep -v grep


2
Schauen Sie sich die Option -S an. Der angegebene Wert wird im Unix-Socket-Dateinamen gespeichert und ist in der lsAusgabe sichtbar . Bei Bedarf können Sie auch die Option -t beibehalten.
Joshperry

Die Option -S ist großartig, da Sie damit auch unter dem Namen der Sitzung screen -rd <sessionname>
fortfahren können

7

Ich bin mir Ihrer Frage nicht wirklich sicher, aber wenn Sie nur eine Liste der aktuell geöffneten Bildschirmsitzungen wünschen, versuchen Sie Folgendes:

screen -ls

6
 For windows system

 Open putty 
 then login in server

Wenn Sie den Bildschirm in der Konsole sehen möchten, müssen Sie einen Befehl schreiben

 Screen -ls

Wenn Sie auf den Bildschirm zugreifen müssen, müssen Sie den folgenden Befehl verwenden

 screen -x screen id

Schreiben Sie PWDin die Befehlszeile, um zu überprüfen, in welchem ​​Ordner Sie sich gerade befinden


3

In den meisten Fällen a screen -RRx $username/ Wille aus :)

Wenn Sie dennoch alle Bildschirme auflisten möchten, fügen Sie das folgende Skript in Ihren Pfad ein und nennen Sie es Bildschirm oder wie auch immer Sie möchten:

#!/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

Es verhält sich genau wie Bildschirm, außer dass alle Bildschirmsitzungen angezeigt werden, wenn die Option -ls-all als erster Parameter angegeben wird.


3

Mehrere Leute haben bereits darauf hingewiesen

$ screen -ls

würde die Bildschirmsitzungen auflisten.

Hier ist ein weiterer Trick, der für Sie nützlich sein kann.

Wenn Sie den folgenden Befehl als letzte Zeile in Ihre .bashrc- Datei auf Server xxx einfügen , wird beim Anmelden automatisch wieder eine Verbindung zu Ihrer Bildschirmsitzung hergestellt.

screen -d -r

Ich hoffe, Sie finden es nützlich.


1
Ich möchte darauf hinweisen, dass Sie als derselbe Benutzer angemeldet sein müssen, der den Bildschirm gestartet hat. Ich befürchtete, dass meine Bildschirmsitzung unterbrochen wurde, aber meine Dateikopie wurde unter dem Benutzer "Medien" fortgesetzt. Es mag logisch klingen, aber es könnte Panik ersparen, wenn Sie es überwachen.
Paul

0

ps x | grep BILDSCHIRM

um zu sehen, welcher Bildschirm ausgeführt wird, falls Sie den Befehl verwendet haben

Bildschirm -A -m -d php make_something.php


-4

Sie verwenden also den Bildschirm, um die Experimente im Hintergrund laufen zu lassen, oder was? Wenn ja, warum nicht einfach im Hintergrund starten?

./experiment &

Und wenn Sie fragen, wie Sie eine Benachrichtigung über die von mir geleistete Arbeit erhalten, wie wäre es, wenn Sie das Experiment mit einem E-Mail-Befehl verknüpfen?

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

Ich verwende den Bildschirm, damit ich mich von den Servern trennen kann, ohne meine Experimente zu beenden. Die Frage war nicht, wie man Benachrichtigungen erhält (obwohl die E-Mail eine gute Möglichkeit sein könnte), sondern wie man herausfindet, ob ein bestimmter Computer eine Sitzung mit geöffnetem Bildschirm hat. Trotzdem danke für deine Antwort!
Wookai

Ich bin kein erfahrener Systemadministrator, aber ich finde, dass die Verwendung des Bildschirms zum Ausführen von Serverprozessen gut funktioniert: Wenn etwas schief geht, können Sie einfach in dieses Fenster blättern und alle Ausgaben sehen, die zu dem Problem geführt haben - das müssen Sie nicht Starten Sie das Öffnen von Protokolldateien. Dies bedeutet auch, dass Sie einen Prozess einfach mit Strg + c beenden können. Dies ist alles praktisch, wenn Sie häufig denselben Dienst starten und herunterfahren.
Steve Bennett
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.