MMo*_*ore 10 postgresql debian puppet debian-squeeze
我正在使用来自 backports 的 PostgreSQL 9.1 的 debian 挤压。Puppet 版本为 2.7.14。不幸的是,init 脚本返回了错误的状态退出代码。因此我编写了一个自定义status
命令来检测 postgresql 是否正在运行。
service { 'postgresql':
ensure => running,
enable => true,
hasstatus => false,
hasrestart => true,
status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if ($4 != \"online\") rc=3} END { exit rc }'",
provider => debian,
}
Run Code Online (Sandbox Code Playgroud)
我的命令像魔法一样有效,但 puppet 似乎有问题。notice: /Stage[main]/Postgresql/Service[postgresql]/ensure: ensure changed 'stopped' to 'running'
尽管它已经在运行,但我总是得到。
所以尝试了以下方法:
service { 'postgresql':
ensure => running,
enable => true,
hasstatus => false,
hasrestart => true,
status => "exit 0",
provider => debian,
}
Run Code Online (Sandbox Code Playgroud)
据我了解这个自定义status
命令,puppet 应该始终认为 postgresql 正在运行。尽管如此,puppet 每次都尝试启动 postgresql。
我的错是什么?还是人偶的bug?
我最好的猜测是,$4
您的命令中的 被 puppet 自己的插值所吞噬,exit 0
并且由于 shell 交互问题而无法正常工作。
我会尝试一些事情。
$4
在您的命令中的插值,请$
像这样:( status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if (\$4 != \"online\") rc=3} END { exit rc }'"
有时需要更多的反斜杠,但我很确定 1 在这里就足够了)。exit
是一个内部的外壳,我不确定 puppet 会如何对待它。因此,请改用规范的“返回成功”命令:status => "/bin/true"
也许status
被覆盖provider => debian
(这将是一个傀儡错误),所以改为指定所有命令并使用基本提供程序(但是这将无法正确启用):
service { 'postgresql':
provider => base,
ensure => 'running',
start => '/etc/init.d/postgresql start',
restart => '/etc/init.d/postgresql restart',
stop => '/etc/init.d/postgresql stop',
status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if (\$4 != \"online\") rc=3} END { exit rc }'",
}
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
6925 次 |
最近记录: |