我正在编写一个Puppet模块来部署Hyperic,如果服务未运行,最后一部分将执行 hq-agent.sh start 。要确定服务是否正在运行,我可以执行 hq-agent.sh status ,其中包括文本“ HQ Agent is running”。
Puppet文档仅规定了可行的条件,但是如果正在运行则需要返回退出代码,如果不运行则需要返回退出代码;否则请返回0。什么是适用的bash(?)命令进行转换?
伪代码=>如果(“ hq-agent.sh状态”包含“正在运行”)返回1;否则返回0;
答案 0 :(得分:1)
这听起来很像应该通过Service
资源而不是Exec
进行建模的事物。这样做不需要通过系统的常规服务控制子系统(初始化脚本,systemd等)来管理服务,尽管我当然建议您为此进行安排,即使您必须自己编写适当的脚本或配置文件也是如此。但是,在这种情况下,hq-agent.sh
脚本听起来好像具有与传统初始化脚本相似的界面(如果不相同)。如果是这样,那么将其设置为普通系统服务可能很容易。如果这样做的话,那么管理起来就像
service { 'hq-agent':
ensure => 'running',
enable => true,
}
但是,如果您只想使用 ad hoc 脚本来管理服务,Puppet可以支持该服务。具体来说,the Service
resource具有start
,restart
,status
和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
}
该特定示例基于与标准SysV初始化脚本的表面相似性,对hq-agent.sh
脚本的退出代码进行了一些假设。具体来说,它假定它们符合LSB specifications。如果实际上没有,那么您需要测试脚本的输出而不是其退出代码,那么一种典型的方法是将输出通过管道传递到grep
中。例如,
status => 'hq-agent.sh status | grep -q running'
但是请注意,您可能需要测试脚本的标准错误而不是标准输出。