你如何配置一个 Puppet exec 来执行另一个命令作为 onlyif 的一部分

德里克·巴特拉姆

我正在编写一个 Puppet 模块来部署 Hyperic,如果服务没有运行,最后一部分是执行hq-agent.sh start要确定服务是否正在运行,我可以执行hq-agent.sh status,其中包含文本“HQ Agent is running”。

Puppet 文档说明 onlyif 可以工作,但是如果运行需要返回退出代码 1,如果不运行则需要返回 0;什么是适用的 bash(?) 命令来进行转换?

伪代码 => if ('hq-agent.sh status' contains "running") return 1; 否则返回0;

约翰·博林格

这听起来很像应该通过Service资源而不是Exec. 这样做不需要通过系统的常规服务控制子系统(initscripts、systemd 等)来管理服务,尽管我当然会建议您安排这样做,即使您必须自己编写适当的脚本或配置文件. 然而,在这种情况下,该hq-agent.sh脚本听起来似乎具有与传统 initscript 相似(如果不完全相同)的界面。如果是这样,那么设置为普通系统服务可能会很容易。如果你这样做了,那么管理它就像

service { 'hq-agent':
  ensure => 'running',
  enable => true,
}

但是如果您只想使用临时脚本来管理服务,Puppet 可以支持。具体而言,Service资源startrestartstatus,和stop属性,使用它可以为管理服务指定任意命令。例如,

service { 'hq-agent':
  ensure     => 'running',
  provider   => 'service',
  hasstatus  => false,
  hasrestart => false,
  status     => 'hq-agent.sh status',
  start      => 'hq-agent.sh start',
  stop       => 'hq-agent.sh stop',
  path       => '/path/to/hyperic/bin',
  # no 'enable' attribute specified
}

该特定示例hq-agent.sh基于它与标准 SysV initscript 的表面相似性,对脚本的退出代码做出了一些假设具体来说,它假设它们符合LSB 规范如果实际上它们没有,因此您需要测试脚本的输出而不是其退出代码,那么典型的方法是将输出通过管道传输到grep. 例如,

  status => 'hq-agent.sh status | grep -q running'

但是请注意,您可能需要测试脚本的标准错误而不是其标准输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何执行Jenkins构建作业,作为另一个作业构建的一部分

如何通过一个环境变量作为命令的一部分

如何从另一个线程锁定方法的一部分?

如何从另一个路径中删除路径的一部分?

如何使Automapper映射另一个表的一部分的属性

你如何用另一个 div 覆盖一个 div 的一部分,比如一张卡片?

powershell如何找出一个变量是否是另一个变量的一部分

将QTableWidget的一部分复制到另一个

根据另一个索引列表删除列表的一部分

在另一个图像后面显示图像的一部分

将 div 的一部分放在另一个下面

将设置的一部分放在另一个文件中

用另一个位图擦除位图的一部分

仅从另一个脚本中获取脚本的一部分?

从另一个IList的一部分快速创建List

从另一个组件重新渲染组件的一部分

查找文本的一部分并写入另一个文件

仅等待另一个线程的一部分-Java

PHP检查是否另一个数组的一部分

卡在“如果”测试中:另一个代码的一部分

pygame - 来自另一个表面的一部分的表面

取弦的一部分,并与另一部分

如何创建一个按钮来更改 href 的一部分?

如何将一个UIViewController作为屏幕的一部分

Postgres:作为多行插入的一部分,从另一个表插入值?

Javascript - 更改作为另一个变量定义一部分的变量值

使用变量作为另一个变量名的一部分

Dataweave-使用另一个键作为keyName一部分的选择器

Django使用模板变量的值作为另一个变量名的一部分