Deixar o comando remoto executando o armazenamento de saída

3

cenário;

Eu usei o SSH em uma máquina, abri uma nova sessão de tela e disparei um script.

Alguns dias depois, eu SSH de volta para aquela máquina, reconecto a sessão de tela e vejo a saída que foi gerada, no entanto; Não consigo voltar pela saída.

Pelo que eu posso ver, a tela armazena uma "tela válida" de saída stdout. Se meu script gerou 100 linhas de saída em 48 horas, não consigo ver tudo, apenas as últimas 40 linhas ímpares ou mais. Existe uma maneira de fazer screen armazenar toda a stdout do script que deixo em execução, para que eu possa anexar novamente a tela e o PgUp / PgDn por meio dela como se fosse um script em execução na minha máquina local?

Talvez screen não seja a melhor maneira de fazer isso? Existe um método melhor para deixar scripts em execução em máquinas remotas após o logout, e ser capaz de anexar novamente a esse processo em uma data posterior e ver toda a saída?

    
por jwbensley 16.03.2012 / 10:24

4 respostas

3

A tela mantém um registro das linhas de saída anteriores; é chamado de "buffer de histórico de rolagem" na documentação da tela.

Para navegar pela rolagem, pressione C-a ESC ( copy ) . Você pode usar a seta e as teclas PgUp / PgDn para navegar, bem como other keys para pesquisar e copiar texto. Pressione ESC para sair do modo de rolagem / cópia.

Por padrão, a tela mantém apenas o valor de 100 linhas. Coloque uma diretiva defscrollback no seu .screenrc para alterar essa figura.

Se você quiser um log completo do seu script, salve-o em um arquivo. Execute-o dentro da Tela para poder conectar-se novamente ao shell pai e ver facilmente se o script ainda está em execução, suspendê-lo e reiniciá-lo, etc. Ou desligá-lo com nohup . Para monitorar o arquivo de log enquanto ele cresce, use tail -f .

    
por 16.03.2012 / 16:43
4

Você pode simplesmente armazenar a saída em um arquivo

my_command > mylogfile

Se você quiser ver o que está acontecendo enquanto o comando está em execução, você pode usar tail em uma segunda tela:

tail -f mylogfile

Você não só poderá ver toda a saída, mas também processá-la (comparar, pesquisar, ...)

Editar se você não quiser usar screen , você sempre pode usar nohup e fechar a sessão

nohup my_command > mylogfile &
    
por 16.03.2012 / 10:57
4

Você também pode ativar o log de saída com o parâmetro -L ao iniciar sua tela, via:

screen -L -S <screen_name>

Isso criará um arquivo de log chamado screenlog.0 no diretório em que você iniciou a tela a partir do comando acima.

Para ver o screenlog.0, use cat (não vi) SO Ref .

cat screenlog.0
    
por 31.05.2012 / 09:31
3

Se você deseja ver a saída na tela e também registrá-la, basta enviar para tee com o nome do seu log como parâmetro.

    
por 16.03.2012 / 17:56