显示命令的输出结果

Computer says no.

— Little Britain

一个问题的详细反馈会对解决问题有帮助。当你使用 exec 资源在节点上执行命令时, 并不总能轻易地找出其为何没有正确执行。如果命令返回一个非零的退出状态,Puppet 就会返回类似如下的错误消息:

err: /Stage[main]//Node[cookbook]/Exec[this-will-fail]/returns: change
from notrun to 0 failed: /bin/ls file-that-doesnt-exist returned 2
instead of one of [0] at /etc/puppet/manifests/nodes.pp:10

通常我们希望看到执行失败时的输出,而不仅仅是一个退出的状态码。 你可以使用 logoutput 参数实现。

操作步骤

用 logoutput 参数定义如下的 exec 资源:

exec { "this-will-fail":
    command   => "/bin/ls file-that-doesnt-exist",
    logoutput => on_failure,
}

工作原理

现在,如果命令执行失败,Puppet 同时会打印命令的错误输出:

notice: /Stage[main]//Node[cookbook]/Exec[this-will-fail]/returns: /bin/
ls: cannot access file-that-doesnt-exist: No such file or directory
err: /Stage[main]//Node[cookbook]/Exec[this-will-fail]/returns: change
from notrun to 0 failed: /bin/ls file-that-doesnt-exist returned 2
instead of one of [0] at /etc/puppet/manifests/nodes.pp:11

更多用法

你可以使用如下的配置为所有的 exec 资源设置打印错误输出的默认值:

Exec {
    logoutput => on_failure,
}

若不管命令执行成功与否,你都想看到其输出,需使用如下的配置:

    logoutput => true,