pri
pri

Reputation: 1

puppet exec command issue

Below is my puppet code ,It is killing the process in agent but showing the error code

exec { "restart_process":
    command => "ps -ef | grep nrpe | grep -v pts/1 | /bin/awk '{print $2}' | xargs kill -9",
    path => ['/usr/bin', '/sbin', '/bin', '/usr/sbin'],
    subscribe => File["/root/Backup/deploy"],
    refreshonly => true,
}

Error code:

Info: Computing checksum on file /root/Backup/deploy/nrpe.sh
Info: /Stage[main]/Myfile/File[/root/Backup/deploy/nrpe.sh]: Filebucketed /root/Backup/deploy/nrpe.sh to puppet with sum   136c6013774f5dfb84943718a70b36e0
Notice: /Stage[main]/Myfile/File[/root/Backup/deploy/nrpe.sh]/content: content 
changed '{md5}136c6013774f5dfb84943718a70b36e0' to '{md5}c4fc9099405a108923ad18f7e2db13c8'
Info: /root/Backup/deploy: Scheduling refresh of Exec[restart_process]
Error: /Stage[main]/Myfile/Exec[restart_process]: Failed to call refresh: ps -ef | grep nrpe | grep -v pts/1 | /bin/awk '{print }' | xargs kill -9 returned  instead of one of [0]
Error: /Stage[main]/Myfile/Exec[restart_process]: ps -ef | grep nrpe | grep -v pts/1 | /bin/awk '{print }' | xargs kill -9 returned  instead of one of [0]
Notice: Finished catalog run in 1.56 seconds

Can any body help me

Upvotes: 0

Views: 2101

Answers (1)

John Bollinger
John Bollinger

Reputation: 181932

@maxd is right that you need to escape the $ in the command when you specify it to Puppet. This is because Puppet performs its own variable interpolation on quotation-mark-quoted strings, and this will replace the $2 with the relevant replacement string -- probably an empty string -- before your command even reaches the catalog, and long before any attempt is made to run it.

I don't think that's your fundamental problem, however. Your command is a shell pipeline, but the default Exec provider for your system is almost certainly posix, and that provider will not do what you want with the command string you provided. You probably want to add

provider => 'shell'

to your resource, to have Puppet use the shell to execute it instead of trying to execute it directly as a (single) command.

Upvotes: 2

Related Questions