我正在尝试使用以下木偶代码确定 Node 包 PM2 是否安装在路径中并可执行。
exec { "create symbolic link for pm2":
cwd => "${pm2_link_dir}",
path => ['/usr/bin','/bin','/usr/sbin','/sbin'],
onlyif => "! which node &> /dev/null",
command => "ln -s ../lib/node_modules/pm2/bin/pm2 pm2"
}
它告诉我找不到命令"!这是确定某些程序是否已安装并可执行的正确方法吗?为什么木偶不能理解 不是操作员??我正在研究Redhat主站和从站。
为什么傀儡不能理解不是运算符?
!
运算符由 shell 提供;它不是命令。 您正在使用Exec
的默认提供程序(posix
),它直接运行命令而不是通过shell运行命令。 (或者说是这样记录的。 最近发现,有时posix
提供程序通过 shell 运行命令,这显然与其文档相矛盾。
无论如何,在Exec
的onlyif
属性中使用!
有点愚蠢,因为您可以删除!
并切换到unless
属性。 并删除重定向,这也依赖于外壳。
这是确定某些程序是否已安装并可执行的正确方法吗?
通常最好知道程序是否应该在特定目标节点上可用,并在必要时确保它可用。 如果必须查询节点状态,则通常最好通过自定义事实进行查询。
话虽如此,我认为您的方法本质上是错误的,尽管当然它只会在您在Exec
中指定的路径中查找请求的程序。