Como obtenho o comando watch para monitorar temps e MHz ao mesmo tempo?

4

Estou executando o servidor Ubuntu 16.04, no qual eu sou SSH.

Eu estou procurando uma maneira de fazer o comando watch monitorar várias coisas, mas se deparando com um problema.

Eu tenho uma função de trabalho que monitora meus tempos de CPU e GPU da seguinte forma.

temps() {
    watch -d -n1 'sensors coretemp-isa-0000 nouveau-pci-0100'
}

Isso funciona muito bem me dando essa saída.

coretemp-isa-0000
Adapter: ISA adapter
Core 0:         +35.0c
Core 1:         +33.0c
Core 2:         +33.0c
Core 3:         +34.0c

nouveau-pci-0100
Adapter: PCI adapter
GPU core:      +0.86 V
fan1:          780 RPM
Temp1:         +41.0c
Power1:        13.26 W 

Eu também tenho essa função que monitora a CPU MHz.

mhz() {
    watch -d -n1 'cat /proc/cpuinfo | grep "MHz"'
}

Isso também funciona muito bem sozinho, dando-me essa saída

cpu MHz        :1600.001
cpu MHz        :1600.001
cpu MHz        :1600.001
cpu MHz        :1600.001

Mas eu quero ser capaz de ter uma função que me dará as duas saídas juntas, mas eu simplesmente não consigo trabalhar.

Eu tentei algumas coisas para combinar essas duas funções em uma em minha .bashrc , de modo a obter uma saída com os tempos e os relógios principais. mas até agora watch apenas me dá erros ou uma tela em branco.

Estas são algumas das coisas que tentei. (desculpas por massacrar esses comandos, mas eu sinto que estou apenas tentando por conta própria é uma boa maneira de aprender, mas eu não tive sucesso até agora.)

A primeira coisa que eu tentei foi simplesmente juntá-las.

watch -d -n1 'sensors coretemp-isa-0000 nouveau-pci-0100 cat /proc/cpuinfo | grep "MHz"'

Isso só me dá erros. Eu tentei muitas maneiras diferentes de citar as coisas para tentar fazê-lo funcionar (eu sei que o relógio é muito particular sobre a citação). Quando isso falhou eu tentei criar variáveis para os sensores e o comando cat mas eu não acho que isso estava me ajudando por exemplo eu tive isso ..

temp="watch -d -n1 'sensors coretemp-isa-0000 nouveau-pci-0100'"
clock="watch -d -n1 'cat /proc/cpuinfo | grep "MHz"'"

watch -d -n1 $temp $clock

Novamente falha: (

Se alguém puder me ajudar a descobrir como fazer com que o comando watch seja enviado para que eu não tenha duas funções separadas, eu só quero digitar "temps" no meu SSH no meu ipad e ser capaz de ver meus servidores e core clocks em uma saída do comando watch.

    
por Hayden Shore 24.12.2016 / 18:01

2 respostas

5

É tão simples quanto unir os dois comandos com um ; dentro da string de argumento para watch :

watch -d -n1 'sensors coretemp-isa-0000 nouveau-pci-0100 ; grep MHz /proc/cpuinfo'

Note também que eu simplifiquei seu segundo comando, pois grep pode ler diretamente dos arquivos.

    
por Byte Commander 24.12.2016 / 18:16
0

Você pode fazer assim:

temp='sensors coretemp-isa-0000 nouveau-pci-0100;'
clock='cat /proc/cpuinfo | grep "MHz";'

watch -d -n1 $temp $clock

Dessa forma, você ganha três coisas:

  1. usando ; no final do comando atribuído à variável você separa comandos diferentes
  2. com o qual você pode adicionar mais variáveis e atribuir mais comandos a elas, basta adicioná-las para assistir
  3. com ; no final de cada comando você pode reordenar variáveis para alterar a ordem das informações exibidas

Você também pode criar um array para armazenar comandos e então passar toda a matriz para o comando watch, mas isso não necessariamente tornará a manutenção do script muito mais fácil - adicionar novos comandos ao array exigirá nova linha para cada comando se você quiser para mantê-lo limpo e legível - você simplesmente não precisará se lembrar de adicionar uma nova variável ao comando watch. Array também faria a diferença para o ponto 3 acima - você teria que reordenar as atribuições de matriz para reordenar as informações exibidas.

EDITAR:

Melhorar o cat /proc/cpuinfo | grep "MHz"; para grep MHz /proc/cpuinfo; também é uma boa idéia, como mencionado por Byte Commander .

    
por tymik 25.12.2016 / 02:07