Tentando chegar ao topo para redirecionar para um arquivo ao usar a tela no Ubuntu 12.04

0

Esta é a minha primeira pergunta sobre o Stack Exchange! Eu tenho usado isso há anos e sempre pareço encontrar minha solução, exceto por esta.

Estou tentando fazer com que top seja executado em uma tela para que eu possa monitorar o desempenho de um único processo em segundo plano. Eu nomeei a instância da tela para me permitir anexar facilmente a ela quando preciso. Eu coloquei tudo isso em um script, pois tudo faz parte de um experimento de monitoramento maior que estou tentando executar, é algo assim.

screen -S TOP -D -m top -b -p $PID > top.log &

O que isso deve fazer é criar uma nova sessão de tela chamada top, depois desanexá-la na criação e executar o comando top, de modo que crie um arquivo binário top.log e coloque-o em segundo plano.

Tudo funciona bem, exceto que o arquivo é criado, mas não é preenchido com nenhum dos principais dados, enquanto que quando eu executo o comando sem tela, ele funciona bem.Parece que a tela não está relacionada ao redirecionamento como parte do comando top, mas está criando arquivo de qualquer maneira, talvez como parte de um comando separado.

Por enquanto, usei o nohup como padrão para executar top em segundo plano, mas gostaria muito de poder anexar à tela.

Alguma idéia?

    
por oche 15.07.2013 / 18:32

3 respostas

0

Seu redirecionamento se referirá apenas à saída do comando screen , não à saída no terminal da tela. Sugiro que você crie um arquivo screenrc especial para essa instância de tela com o seguinte conteúdo:

session top -b -p $MYPID
sessionname TOP
logfile /path/to/top.log
log on
detach

A variável de ambiente MYPID deve ser definida antes de chamar o comando screen . Em seguida, você invoca screen usando a opção -c e o nome do arquivo screenrc :

MYPID=$PID screen -c /path/to/top-screenrc

O arquivo screenrc contém os comandos screen , conforme explicado na página man. Primeiro, ele cria uma nova sessão com top , define um nome de sessão, define um arquivo de log para ele e, em seguida, inicia o registro. Como última etapa, a sessão é desanexada e o comando retorna ao prompt. Você não precisará enviá-lo explicitamente em segundo plano (ou seja, anexar & não será necessário).

Espero que isso corresponda ao seu problema.

    
por 15.07.2013 / 19:27
0

Tente:

$(screen -S TOP -D -m top -b -p $PID > top.log) &
    
por 15.07.2013 / 19:05
0

Não é tela, mas sim o shell (bash, eu presumo) que redireciona a saída. A linha de comando fornecida redirecionará a saída do programa de tela, em vez da sessão de screeen chamada TOP:

screen -S TOP -D -m top -b -p $PID > top.log &

Eu tentaria isso em seguida:

screen -S TOP -D -m " top -b -p $PID > top.log " &

Você pode precisar tornar o comando top em um arquivo de script de uma linha se a tela tratar a seção entre aspas como um único comando ou nome de arquivo e falhar.

    
por 15.07.2013 / 20:51

Tags