J'ai un groupe de serveurs sur lesquels je fais des expériences en utilisant screen
. La procédure est la suivante:
ssh
sur le serveur XXXscreen
screen
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.
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.
La commande screen -list peut être ce que vous voulez.
Voir le homme
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
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
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.
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.
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.
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