editar - linux easytag
¿Cómo listar sesiones de pantalla en ejecución? (9)
Tengo un montón de servidores, en los que ejecuto experimentos usando la screen
. El procedimiento es el siguiente:
-
ssh
al servidor XXX -
screen
inicio - iniciar experimentos en unas pocas pestañas
- separar la
screen
- desconectar del servidor
Mientras se están ejecutando los experimentos, puedo encontrar fácilmente en qué servidores están haciendo ssh
a todos los servidores y enumerando mis procesos en ejecución (usando top
o ps
).
Sin embargo, una vez finalizados los experimentos, ¿cómo puedo encontrar en qué servidores tengo una sesión de pantalla abierta (para poder ver la salida, relanzarlos, etc.)?
PD: mis experimentos también imprimen su salida a archivos ... pero este no es el punto de mi pregunta.
ps x | pantalla de grep
para ver qué es esa pantalla corriendo en caso de que haya usado el comando
pantalla -A -m -d php make_something.php
En la mayoría de los casos, una screen -RRx $username/
será suficiente :)
Si aún desea enumerar todas las pantallas, coloque el siguiente script en su ruta y llámelo a la pantalla o como quiera:
#!/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
Se comportará exactamente igual que la pantalla, excepto cuando se muestran todas las sesiones de pantalla, cuando se da la opción -ls-all como primer parámetro.
Entonces, ¿estás usando la pantalla para mantener los experimentos ejecutándose en segundo plano, o qué? Si es así, ¿por qué no empezar solo en segundo plano?
./experiment &
Y si está preguntando cómo obtener la notificación del trabajo que hice, ¿qué le parece encadenar el experimento con un comando de correo?
./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"
La lista de pantalla de comandos puede ser lo que quieras.
Ver al man
Múltiples personas ya han señalado que
$ screen -ls
Enumeraría las sesiones de pantalla.
Aquí hay otro truco que puede ser útil para usted.
Si agrega el siguiente comando como última línea en su archivo .bashrc en el servidor xxx, entonces se volverá a conectar automáticamente a su sesión de pantalla al iniciar sesión.
screen -d -r
Esperamos que te sea útil.
No estoy muy seguro de tu pregunta, pero si lo que realmente deseas es una sesión de pantalla abierta actualmente, prueba:
screen -ls
Para enumerar todas las sesiones de pantalla para un usuario, ejecute el siguiente comando como ese usuario:
screen -ls
Para ver todas las sesiones de pantalla en una máquina específica puede hacer:
ls -laR /var/run/screen/
Tengo esto en mi máquina:
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 ..
Este es un uso un tanto brillante de Unixy de Unix Sockets envuelto en permisos de sistemas de archivos para manejar la seguridad, el estado y las secuencias.
Si bien la respuesta de joshperry es correcta, me parece muy molesto que no te diga el nombre de la pantalla (el que configuraste con la opción -t), que en realidad es lo que usas para identificar una sesión. (No es su culpa, por supuesto, eso es un defecto de pantalla)
Por eso, en cambio, uso un script como este: ps auxw|grep -i screen|grep -v grep
For windows system
Open putty
then login in server
Si desea ver la pantalla en la consola, entonces tiene que escribir el comando
Screen -ls
Si tiene que acceder a la pantalla, entonces tiene que usar el siguiente comando
screen -x screen id
Escriba PWD
en la línea de comando para verificar en qué carpeta está actualmente