bash set variável env não está funcionando no pdsh

3

Estou usando o PDSH para controlar vários servidores por meio de uma linha de comando.

O comando abaixo funciona bem em servidores individuais, mas quando eu insiro o comando de exportação dentro do PDSH, o eco está de volta vazio.

Alguma idéia de por que isso acontece ou como corrigi-lo?

Exemplo específico:

Isso funciona bem:

# export CRAWL_DATE=$(date +%Y%m%d);
# echo $CRAWL_DATE
20131206

mas no PDSH, ele exibe valores em branco:

pdsh> export CRAWL_DATE=$(date +%Y%m%d);
pdsh> echo $CRAWL_DATE;
<IP 1>: 
<IP 2>:
    
por d-_-b 07.12.2013 / 03:48

1 resposta

4

Quando executo o seguinte comando, parece funcionar bem.

$ pdsh -w root@skinner,root@mulder \
    'export CRAWL_DATE=$(date +%Y%m%d); echo $CRAWL_DATE;'
skinner: 20131206
mulder: 20131206

Executar como você está descrevendo mostra isso:

$ pdsh -w root@skinner,root@mulder
pdsh> export CRAWL_DATE=$(date +%Y%m%d);
pdsh> echo $CRAWL_DATE;
skinner: 
mulder: 

A execução deste modo funciona assim:

pdsh> export CRAWL_DATE=$(date +%Y%m%d); echo $CRAWL_DATE;
skinner: 20131206
mulder: 20131206

Então, por que o método # 2 não funcionou?

O motivo provável é que toda vez que você executar um comando em pdsh e clicar em retornar, esse comando será executado via ssh em cada host. O próximo comando executado é executado em uma sessão ssh totalmente diferente com um shell diferente, portanto a variável não existe.

Esta questão que foi apresentada em 2011, acho que dá credibilidade à minha conclusão. Edição 37: Suportar variáveis definidas pelo usuário no pdsh .

Houve uma solução interessante mencionada nessa edição, principalmente:

$ pdsh -w ^hostfile -Rexec ssh -2 -l %u %h '. ~/.pdsh/vars/%h; command'

Esse método faz uso de um arquivo que contém as variáveis, e cada comando pode, então, originar este arquivo, . ~/.pdsh/vars/%h cada vez que um comando é executado remotamente.

    
por 07.12.2013 / 04:03