Enviando “ps” através de vários servidores, saída indo para um arquivo de texto

3

Estou tentando criar um script que produza todos os processos extintos em 66 caixas redhat para um único arquivo de texto. Eu entendo os princípios de fazer isso em uma caixa, mas não tenho certeza de como encaixar esse processo em algo que será executado em uma caixa, mas consulte várias caixas.

Então, encontrei este pequeno script:

for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done

Entendo que eu poderia essencialmente enviar ps -ef | grep "defunct" como $command , mas acho que qualquer arquivo de saída que eu criar será descartado no host em que está sendo executado.

Alguém pode me ajudar com essa execução de uma caixa, armazenando a saída nessa caixa, mas contendo as informações das outras 65 caixas?

Se isso ajudar, acredito que temos ssh sem senha no lugar. Meu conhecimento do Unix é meio que intermediário, conheço alguns bits porque estou usando o SAS.

    
por Dan 13.12.2017 / 11:00

1 resposta

5

O redirecionamento acontece na máquina de chamada, não na máquina remota, portanto, o arquivo resultante será local. Além disso, o grep não precisa ser executado remotamente:

while read -r host; do
    ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt

Isso executa ps -ef em cada host e grep extrairá as linhas defunct de saída. O grep será executado localmente, não remotamente. O arquivo de resultado, da mesma forma, é criado localmente.

Se você quiser um único arquivo de saída:

while read -r host; do
    ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt

Ou mesmo (para uma única invocação de grep )

while read -r host; do
    ssh "$host" ps -ef 
done <hosts.txt | grep "defunct" >output.txt
    
por 13.12.2017 / 11:09