web-dev-qa-db-fra.com

Comment lister les sessions d'écran en cours?

J'ai un groupe de serveurs sur lesquels je fais des expériences en utilisant screen. La procédure est la suivante:

  1. ssh sur le serveur XXX
  2. lancer screen
  3. commencer des expériences dans quelques onglets
  4. détachez screen
  5. déconnecter du serveur

Pendant que les expériences sont en cours, je peux facilement trouver sur quels serveurs elles se trouvent en ssh à tous les serveurs et en listant mes processus en cours (en utilisant top ou ps).

Cependant, une fois les expériences terminées, comment puis-je trouver sur quels serveurs une session d’écran est ouverte (pour pouvoir regarder la sortie, la relancer, etc.)?

PS: mes expériences impriment aussi leur sortie sur des fichiers ... mais ce n'est pas le but de ma question.

203
Wookai

Pour répertorier toutes les sessions d'écran d'un utilisateur, exécutez la commande suivante en tant qu'utilisateur:

screen -ls

Pour voir toutes les sessions d'écran sur une machine spécifique, vous pouvez faire:

ls -laR /var/run/screen/

Je reçois ceci sur ma machine:

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

Ceci est une utilisation plutôt brillante d'Unixy de sockets Unix encapsulés dans des autorisations de système de fichiers pour gérer la sécurité, l'état et les flux.

378
joshperry

La commande screen -list peut être ce que vous voulez.

Voir le homme

19
Zoredache

Bien que la réponse de Joshperry soit correcte, je trouve très ennuyeux de ne pas vous dire le nom d'écran (celui que vous avez défini avec l'option -t), c'est en fait ce que vous utilisez pour identifier une session. (pas sa faute, bien sûr, c'est un défaut d'écran)

C'est pourquoi j'ai plutôt utilisé un script tel que celui-ci: ps auxw|grep -i screen|grep -v grep

13
o0'.

Je ne suis pas vraiment sûr de votre question, mais si tout ce que vous voulez, c'est la liste des sessions d'écran actuellement ouvertes, essayez:

screen -ls
6
skinp
 For windows system

 Open PuTTY 
 then login in server

Si vous voulez voir l'écran dans la console, vous devez écrire la commande

 Screen -ls

si vous devez accéder à l'écran, vous devez utiliser la commande ci-dessous

 screen -x screen id

Écrivez PWD dans la ligne de commande pour vérifier dans quel dossier vous vous trouvez.

6
Ankit jain

Dans la plupart des cas, un screen -RRx $username/ suffira :)

Si vous souhaitez toujours répertorier tous les écrans, placez le script suivant dans votre chemin et appelez-le écran ou celui que vous préférez:

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

Il se comportera exactement comme l'écran, à l'exception de l'affichage de toutes les sessions d'écran, en donnant à l'option -ls-all le premier paramètre.

3
ObiWahn

Plusieurs personnes ont déjà souligné que

$ screen -ls

listerait les sessions d'écran.

Voici une autre astuce qui peut vous être utile.

Si vous ajoutez la commande suivante en dernière ligne de votre fichier . Bashrc sur le serveur xxx, il se reconnectera automatiquement à votre session écran lors de la connexion.

screen -d -r

J'espère que vous le trouverez utile.

3
samurai

ps x | GREP SCREEN

pour voir quel écran est en cours d'exécution au cas où vous auriez utilisé la commande

écran -A -m -d php make_something.php

0
theworlddecoded