Ich habe eine Reihe von Servern, auf denen ich Experimente mit screen
durchführe. Die Vorgehensweise ist wie folgt:
ssh
an Server XXXscreen
screen
Während die Experimente ausgeführt werden, kann ich leicht herausfinden, auf welchen Servern sie sich befinden, indem ich ssh
auf alle Server übersetze und meine ausgeführten Prozesse aufführe (mit top
oder ps
).
Wie kann ich jedoch nach Abschluss der Experimente feststellen, auf welchen Servern eine Bildschirmsitzung geöffnet ist (damit ich die Ausgabe überprüfen, neu starten usw. kann)?
PS: Meine Experimente drucken ihre Ausgabe auch in Dateien ... aber das ist nicht der Punkt meiner Frage.
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 meinem Rechner:
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 ziemlich brillante Unix-Verwendung von Unix-Sockets, die in Dateisystemberechtigungen eingebunden sind, um Sicherheit, Status und Streams zu verarbeiten.
Der Befehl Bildschirm-Liste kann sein, was Sie wollen.
Siehe das Mann
Obwohl die Antwort von joshperry richtig ist, finde ich es sehr ärgerlich, dass der Bildschirmname (der mit der Option -t festgelegte) nicht angegeben wird. Dies ist eigentlich der Name, mit dem Sie eine Sitzung identifizieren. (nicht seine Schuld, natürlich, das ist ein Fehler des Bildschirms)
Deshalb verwende ich stattdessen ein Skript wie das folgende: ps auxw|grep -i screen|grep -v grep
Ich bin mir Ihrer Frage nicht ganz sicher, aber wenn Sie nur die aktuell geöffnete Bildschirmsitzung auflisten möchten, versuchen Sie Folgendes:
screen -ls
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 PWD
in die Befehlszeile, um zu überprüfen, in welchem Ordner Sie sich gerade befinden
In den meisten Fällen ist ein screen -RRx $username/
wird genügen :)
Wenn Sie dennoch alle Bildschirme auflisten möchten, fügen Sie das folgende Skript in Ihren Pfad ein und rufen Sie es screen oder wie auch immer auf:
#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
exec /usr/bin/screen "[email protected]"
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 genauso wie screen, außer dass alle Bildschirmsitzungen angezeigt werden, wenn die Option -ls-all als erster Parameter angegeben wird.
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 eine neue Verbindung zu Ihrer Bildschirmsitzung hergestellt.
screen -d -r
Ich hoffe, Sie finden es nützlich.
ps x | grep SCREEN
um zu sehen, was auf dem Bildschirm angezeigt wird, falls Sie den Befehl verwendet haben
screen -A -m -d php make_something.php