puppet onlyif com pgrep não funciona

3

Eu quero usar um exec no fantoche somente se o processo NÃO estiver sendo executado

exec { "execute me":
    onlyif  => "pgrep -fc 'ruby execute.rb'",  
    command => "execute me",
}

Portanto, no caso acima, se o processo 'ruby execute.rb' já estiver em execução, o exec não deve ser executado como

pgrep -fc 'ruby execute.rb' will return 1.

No entanto

O comando parece sempre ser executado no fantoche.

Na minha caixa linux quando eu faço pgrep -fc 'ruby execute.rb' eu sempre recebo um valor maior que 0.

Há algo errado com meu comando?

    
por Spyros Lambrinidis 22.11.2013 / 09:24

2 respostas

5

Seu exec só será executado se o pgrep retornar 0 . A página de manual pgrep informa que o código de saída do pgrep será zero (0) somente quando os processos correspondentes forem encontrados e retornará um (1) quando não houver processos correspondentes. A documentação do fantoche, por outro lado, diz-nos que o parâmetro onlyif faz com que o recurso seja ser executado somente quando o comando no parâmetro retornar 0.

Em vez de onlyif , você deve usar o parâmetro , a menos que . Dessa forma, o seu exec só funcionará quando o seu pgrep retornar diferente de zero. não encontra nenhum processo correspondente.

exec { "execute me":
  unless  => "pgrep -fc 'ruby execute.rb'",  
  command => "execute me",
}
    
por 22.11.2013 / 16:30
2

Você já tentou usar o caminho completo: / usr / bin / pgrep?

Talvez o agente fantoche não consiga encontrar o comando pgrep na instrução onlyif / unless. Também é possível especificar o caminho de pesquisa do comando no tipo de recurso exec como caminho do atributo link

exec { "execute me":
    onlyif  => "pgrep -fc 'ruby execute.rb'",  
    command => "execute me",
    path    => "/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin",
}
    
por 21.04.2016 / 17:11