Título do terminal dinâmico: mostra o status de carregamento do servidor no intervalo de X segundos

0

Quando eu tiver um monte de terminais abertos no meu WM, seria bom se os títulos da janela do terminal refletissem o usuário atual e o host (fácil) junto com detalhes dinâmicos da carga do servidor, atualizados em algum intervalo (hard-er).

Usando o PROMPT_COMMAND, posso obter os dados desejados no título da janela do terminal; no entanto, é necessário que o faça algo (alterando diretórios, por exemplo) para que o título da janela seja atualizado com as informações mais recentes. Idealmente, como muitos, eu preferiria não fazer nada.

Então, existe algum tipo de mágica de intervalo-y de tempo limite definido que eu possa aplicar para obter o título da janela dinamicamente atualizado sem interação do usuário?

function curr_load {
  # interval wrapper here, or somewhere at any rate ;-)
  uptime
}
PROMPT_COMMAND='echo -ne "3]0;${USER}@${HOSTNAME} ['curr_load']
function curr_load {
  # interval wrapper here, or somewhere at any rate ;-)
  uptime
}
PROMPT_COMMAND='echo -ne "3]0;${USER}@${HOSTNAME} ['curr_load']%pre%7"'
7"'

Obrigado por pistas

    
por virtualeyes 07.03.2013 / 00:51

2 respostas

2

A única maneira que eu conheço seria um processo em segundo plano. Você poderia iniciar isto automaticamente com .bash_profile ou similar (mas você provavelmente desejaria verificar se você estava em um xterm e também isto causará o carregamento como toda janela irá exibi-lo), ou iniciá-lo uma vez manualmente quando você fizer o login. >

Por exemplo, usando seu código acima, crie um arquivo no PATH chamado printload set to exec contendo:

#!/bin/bash
function curr_load {
  # interval wrapper here, or somewhere at any rate ;-)
  uptime
}
while true; 
do 
   echo -ne "3]0;${USER}@${HOSTNAME} ['curr_load']
printload &
7" sleep 3 done

E, em seguida, inicie o printload com:

#!/bin/bash
function curr_load {
  # interval wrapper here, or somewhere at any rate ;-)
  uptime
}
while true; 
do 
   echo -ne "3]0;${USER}@${HOSTNAME} ['curr_load']
printload &
7" sleep 3 done

Que você pode, claro, se colocar em um script para ser chamado automaticamente ou manualmente.

** NOTA: Não testado para sintaxe, mas deve funcionar em teoria **

    
por 07.03.2013 / 01:57
0

Veja o que acabei fazendo, usando a abordagem de tarefa em segundo plano do @Dave C com dois scripts bash executáveis no servidor remoto, status de status e execução de status de status.

#!/bin/bash
function curr_load { cat /proc/loadavg | awk '{print $1 " " $2 " " $3}' }
function mem_free {
  cat /proc/meminfo | grep MemFree|awk '{print sprintf("%.0f", $2/1024)" MB"}'    
}
while true; 
do
  echo -ne "3]0;${USER}@${HOSTNAME} 'mem_free' ['curr_load']
foo@serv1 226MB [0.43 0.50 0.35]
bar@serv2 332MB [0.23 0.38 0.27]
baz@serv3 295MB [0.15 0.22 0.26]
7" sleep 5 done ****** #!/bin/bash ~/scripts/./term-status &

Com os arquivos em vigor no servidor remoto, modifico aliases de bash existentes para ssh em máquinas remotas de destino, anexando o comando para executar no login da seguinte forma:
    alias goapache = 'ssh -i $ {key} usuário @ algum-ip -t ~ / scripts /./ termo-status-run; bash --login '

No meu gerenciador de janelas do Linux (i3), os terminais empilhados conectados ao servidor remoto agora têm títulos como:

#!/bin/bash
function curr_load { cat /proc/loadavg | awk '{print $1 " " $2 " " $3}' }
function mem_free {
  cat /proc/meminfo | grep MemFree|awk '{print sprintf("%.0f", $2/1024)" MB"}'    
}
while true; 
do
  echo -ne "3]0;${USER}@${HOSTNAME} 'mem_free' ['curr_load']
foo@serv1 226MB [0.43 0.50 0.35]
bar@serv2 332MB [0.23 0.38 0.27]
baz@serv3 295MB [0.15 0.22 0.26]
7" sleep 5 done ****** #!/bin/bash ~/scripts/./term-status &

refletindo a memória livre e as médias de carga em intervalos de 5 segundos.

Faz o truque, é legal ver o status do servidor na barra de título do terminal, sem mencionar que é muito mais fácil distinguir os terminais locais dos remotos.

    
por 08.03.2013 / 22:01