Eu tenho procurado para encontrar uma maneira de enviar um comando para uma sessão de tela desanexada. Por enquanto, tudo bem. Isto é o que eu vim com:
$ screen -S test -p 0 -X stuff 'command\n'
Este comando funciona como deveria. Mas também gostaria que a saída ecoasse diretamente na frente dos meus olhos (não há necessidade de um .log
arquivo ou algo assim, eu só quero a saída).
Usando o screen -L
comando, não é uma opção.
linux
ubuntu
gnu-screen
Robin
fonte
fonte
screen
? Não é para isso que os processos filhos são feitos?Respostas:
Use um tubo primeiro a entrar:
Use um operador de redirecionamento. Redirecione a saída do comando para / tmp / test, por exemplo, da seguinte maneira:
Então em outra concha
Observe que você também pode redirecionar mensagens de erro usando o operador 2> & 1 .
Exemplo
Conforme solicitado nos comentários, vamos assumir que temos um script php que aceita a entrada do usuário e imprime a carga do servidor na entrada de "status":
Você cria dois fifos:
Você chama uma tela:
Em outro console, vamos chamá-lo de console 2 e você descobrir o nome da sua tela:
No console 2, você envia o comando para a tela:
você vê o comando aparecendo na tela. Agora, no console 2, você pode enviar comandos para o seu processo php:
e leia a partir dele:
fonte
Eu tenho um script python que monitora várias sessões de tela desanexada e captura a saída de cada uma (quando comandos de utilização como free, top -bn2, iostat são enviados periodicamente via 'stuff').
Em vez de redirecionar para um arquivo e, assim, gerenciar pelo menos um arquivo por sessão de tela desanexada ... Simplesmente redireciono para qualquer tty / pts que minha sessão pai esteja usando.
Etapa 1: inicie uma nova sessão de tela (com um nome legível por humanos) no modo desanexado.
Etapa 2: Envie seus comandos (usarei o comando 'free -g' junto com 'uname -r') via material. É importante especificar a janela que você deseja usar (no nosso caso, a primeira e única janela) com -p.
Etapa 3: A etapa acima envia apenas o texto do comando. Também precisamos enviar um retorno de carro para esta sessão de tela desanexada para que o shell execute nosso comando. O caractere ASCII 015 é um retorno de carro na maioria dos sistemas * nix.
Etapa # 4: Redirecione a saída de nossa sessão de tela desanexada para nossos atuais tty / pts:
A saída da Etapa 4 será mais ou menos assim:
Embora isso pareça um pouco envolvido, o processo é facilmente programável. Com o python, eu posso analisar a saída da Etapa 4 e capturar apenas os dados que me interessam.
Escolhendo um cenário simples como obter detalhes de IP, escrevi um exemplo de script para demonstrar os conceitos acima. Sinta-se livre para substituir e mexer como achar melhor.
Exemplo de script python para obter detalhes de IP de uma sessão de tela desanexada:
Script acima em ação:
fonte
screen -X logfile /tmp/something
;screen -X log on
;screen -X stuff "command param"
;screen -X log off
para trabalhar ainda melhor nesse cenário.Exemplo:
fonte