desenv-web-rp.com

Como listar as sessões da tela de corrida?

Eu tenho um monte de servidores, nos quais executo experimentos usando screen. O procedimento é o seguinte:

  1. ssh para o servidor XXX
  2. lançamento screen
  3. iniciar experimentos em algumas guias
  4. desanexar screen
  5. desconectar do servidor

Enquanto os experimentos estão em execução, posso encontrar facilmente em quais servidores eles estão sshing para todos os servidores e listando meus processos em execução (usando top ou ps).

No entanto, uma vez que os experimentos estão concluídos, como eu poderia encontrar em quais servidores eu tenho uma sessão de tela aberta (para que eu possa dar uma olhada na saída, relançá-los, etc.)?

PS: minhas experiências também imprimem sua saída para arquivos ... mas esse não é o ponto da minha pergunta.

200
Wookai

Para listar todas as sessões de tela para um usuário, execute o seguinte comando como esse usuário:

screen -ls

Para ver todas as sessões de tela em uma máquina específica, você pode fazer:

ls -laR /var/run/screen/

Eu entendo isso na minha 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 é um uso bastante Unixy do Unix Sockets envolvido em permissões do sistema de arquivos para lidar com segurança, estado e fluxos.

371
joshperry

O comando screen -list pode ser o que você deseja.

Veja o man

19
Zoredache

Embora a resposta do joshperry esteja correta, acho muito irritante que ela não diga o nome da tela (aquela que você definiu com a opção -t), que é, na verdade, o que você usa para identificar uma sessão. (não é culpa dele, claro, essa é a falha de uma tela)

É por isso que uso um script como este: ps auxw|grep -i screen|grep -v grep

13
o0'.

Eu não tenho certeza da sua pergunta, mas se tudo o que você realmente quer é a sessão de tela da lista atualmente aberta, tente:

screen -ls
6
skinp
 For windows system

 Open PuTTY 
 then login in server

Se você quiser ver a tela no console, então você tem que escrever o comando

 Screen -ls

se você tem que acessar a tela, então você tem que usar o comando abaixo

 screen -x screen id

Escreva PWD na linha de comando para verificar em qual pasta você está atualmente

6
Ankit jain

Na maioria dos casos, um screen -RRx $username/ será suficiente :)

Se você ainda quiser listar todas as telas, coloque o seguinte script em seu caminho e chame-o de tela ou o que quiser:

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

Ele se comportará exatamente como a tela, exceto para mostrar todas as sessões de tela, ao fornecer a opção -ls-all como primeiro parâmetro.

3
ObiWahn

Várias pessoas já apontaram que

$ screen -ls

listaria as sessões de tela.

Aqui está outro truque que pode ser útil para você.

Se você adicionar o seguinte comando como uma última linha no seu arquivo . Bashrc no servidor xxx, ele se reconectará automaticamente à sua sessão de tela no login.

screen -d -r

Espero que você ache útil.

3
samurai

ps x | grep SCREEN

para ver o que é que a tela em execução no caso de você usou o comando

tela -A -m -d php make_something.php

0
theworlddecoded