首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用puppet在linux虚拟机上执行脚本

如何使用puppet在linux虚拟机上执行脚本
EN

Stack Overflow用户
提问于 2019-06-28 02:26:24
回答 1查看 226关注 0票数 0

我需要木偶来执行一个脚本,是在一个已安装的应用程序。此外,我只需要在检测到旧版本的且不在特定服务器上时运行,然后再安装新版本

我已经尝试了很多东西,但是我正在迷失方向。首先,我尝试使用cd转到脚本所在的位置,然后尝试直接运行脚本,但我一直收到相同的错误。

install.pp

代码语言:javascript
复制
# Install required packages
class tripwire::install {

  exec { 'uninstall_tripwire':
    command => './usr/local/tripwire/te/agent/bin/uninstall.sh',
    cwd     => '/usr/local/tripwire/te/agent/bin',
    path    => '/usr/bin/sh',

    onlyif  => [
                  "${::fqdn} != 'server.com'",
                  '/usr/bin/test -f 
/usr/local/tripwire/te/agent/bin/uninstall.sh',
                  "grep -c '8.6.0' /usr/local/tripwire/te/agent/data/version",
      ],
    notify  => Exec['install_tripwire'],

我认为这会执行脚本,但我得到的结果是:错误: /Stagemain/Tripwire::Install/Execuninstall_tripwire:无法求值:无法找到命令'server.com‘

EN

回答 1

Stack Overflow用户

发布于 2019-06-28 03:27:29

我需要木偶来执行安装的应用程序内部的脚本。此外,我只需要在检测到旧版本的且不在特定服务器上时运行,然后再安装新版本

您似乎正在尝试使用Exec执行的特定任务复制了Package资源的标准行为。你真的真的应该通过包来管理软件,即使你必须自己做一些打包工作并维护一个本地包存储库。花费在包装上的时间很容易被节省的时间管理软件所抵消,即使在混合中使用木偶也是如此。

此外,就控制要对哪些机器进行操作而言,您应该将其视为分类问题。如果该类不应应用于计算机server.com,则不应将其声明到该计算机的目录中。如果它应用于该机器与其他机器不同,那么应该适当地参数化它,并使用这些参数(在分类时,可能在Hiera的帮助下)为每台目标机器选择适当的行为。

尽管如此,对于实际显示的代码,错误消息

无法求值:找不到命令'server.com‘

反映您的onlyif数组的这个元素...

"${::fqdn} != 'server.com'",

..。不是命令。onlyif需要一个可在目标系统上执行的命令或命令数组,因此可以改为:

代码语言:javascript
复制
                  "test ${::fqdn} != server.com",

此外,这看起来是错误的:

command => './usr/local/tripwire/te/agent/bin/uninstall.sh',

删除前导.,除非您真的打算根据工作目录解析该路径。如果您确实打算将其解析为相对路径,那么我强烈建议您将其扩展为绝对路径。

此外,这可能不是您想要的结果:

path => '/usr/bin/sh',

PATH环境变量一样,path属性命名一个二进制搜索路径。您可能确实想指定一个命令,比如'/bin:/usr/bin:/sbin:/usr/sbin',但是如果您所放置的命令的目的是通过shell执行命令,那么您要寻找的是

代码语言:javascript
复制
    provider => 'shell',
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56796817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档