Comment lister les sessions d'écran en cours d'exécution?
J'ai un tas de serveurs, sur lesquels je lance des expériences en utilisant screen
. La procédure est la suivante :
- {[1] } vers le serveur XXX
- lancement
screen
- démarrer les expériences dans quelques onglets
- détacher
screen
- déconnexion du serveur
Pendant que les expériences sont en cours d'exécution, je peux facilement trouver sur quels serveurs elles se trouvent en ssh
ING à tous les serveurs et en listant mes processus en cours (en utilisant top
ou ps
).
Cependant, une fois le les expériences sont terminées, Comment pourrais-je trouver sur quels serveurs j'ai ouvert une session d'écran (pour que je puisse jeter un oeil à la sortie, les relancer, etc.) ?
PS: mes expériences impriment aussi leur sortie dans des fichiers... mais ce n'est pas le point de ma question.
9 réponses
Faire la liste de toutes les sessions é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 ..
C'est une utilisation plutôt brillante Unixy des Sockets Unix enveloppés dans des autorisations de système de fichiers pour gérer la sécurité, l'état et les flux.
Bien que la réponse de joshperry soit correcte, je trouve très ennuyeux qu'elle ne vous indique pas le nom d'écran (celui que vous définissez avec l'option-t), c'est en fait ce que vous utilisez pour identifier une session. (pas sa faute, bien sûr, c'est la faille d'un écran)
C'est pourquoi j'utilise à la place un script comme celui-ci: ps auxw|grep -i screen|grep -v grep
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
en ligne de commande pour vérifier dans quel dossier vous vous trouvez actuellement
Je ne suis pas vraiment sûr de votre question, mais si tout ce que vous voulez vraiment est une session d'écran actuellement ouverte, essayez:
screen -ls
Dans la plupart des cas un screen -RRx $username/
suffira :)
Si vous voulez toujours lister tous les écrans, mettez ce qui suit script dans votre chemin et appelez-le screen ou ce que vous voulez:
#!/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 sauf pour afficher toutes les sessions d'écran, lorsque vous donnez l'option-ls-all comme premier paramètre.
Plusieurs personnes ont déjà souligné que
$ screen -ls
Liste les sessions d'écran.
Voici une autre astuce qui peut vous être utile.
Si vous ajoutez la commande suivante comme dernière ligne dans votre .bashrc fichier sur le serveur xxx, alors il se reconnectera automatiquement à votre l'écran de session lors de la connexion.
screen -d -r
J'espère que vous le trouverez utile.
Écran Ps x | grep
Pour voir quel est cet écran en cours d'exécution au cas où vous utiliseriez la commande
Écran -A-m-j php make_something.php
Donc, vous utilisez l'écran pour garder les expériences en arrière-plan, ou quoi? Si oui, pourquoi ne pas simplement le démarrer en arrière-plan?
./experiment &
Et si vous demandez comment obtenir une notification du travail que j'ai fait, que diriez-vous de ficeler l'expérience avec une commande de courrier?
./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"