我正在使用backports的PostgreSQL 9.1中的debian squeeze。 木偶版本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, }
我的命令像一个魅力,但傀儡似乎有问题。 我总是得到notice: /Stage[main]/Postgresql/Service[postgresql]/ensure: ensure changed 'stopped' to 'running'虽然它已经在notice: /Stage[main]/Postgresql/Service[postgresql]/ensure: ensure changed 'stopped' to 'running'但notice: /Stage[main]/Postgresql/Service[postgresql]/ensure: ensure changed 'stopped' to 'running'已将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, }
正如我了解这个自定义status命令,木偶应该总是认为postgresql正在运行。 尽pipe如此,puppet每次都试图启动postgresql。
我的错是什么? 或者这是傀儡的错误?
我最好的猜测是你的命令中的$4被伪装自己的内插吞噬了,并且由于shell交互问题, exit 0不能正常工作。
我会尝试一些事情。
$4傀儡插值转义$ like so: status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if (\$4 != \"online\") rc=3} END { exit rc }'" (有时候需要更多的反斜杠,但是我确信1就足够了)。 exit是一个内部的壳,我不知道如何傀儡会对待。 因此,请使用规范的“返回成功”命令: status => "/bin/true" 也许status被provider => debian (这将是一个puppet bug)被覆盖,所以改为指定所有的命令,然后使用基本的提供者(但是不能正确启用):
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 }'", }