私は、バックポートからPostgreSQL 9.1でdebian squeezeを使用しています。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,
}
私のコマンドはチャームのように機能しますが、人形には問題があるようです。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
コマンドを理解したので、puppetは常にpostgresqlが実行されていると考えるべきです。それにもかかわらず、人形は毎回postgresqlを起動しようとします。
私のせいは何ですか?それとも人形のバグですか?
exit 0は有効なコマンドですか?通常、exitコマンドはシェルの内部にあります。あなたはbash -c 'exit 0'のようなことをする必要がありますか?
—
Zoredache
@Zoredacheあなたは正しい。sh -c 'exit 0'を使用すると
—
MMore
status
、puppet のコマンドは期待どおりに機能します。
provider => init
(そしてenable
パラメーターを削除してください)。