は現在、このように構成されている事柄の属性を持つ私のレシピ:シェフの通知によるサービスの再起動を最小限に抑えますか?
service 'myservice' do
action :nothing
supports :status => true, :start => true, :stop => true, :restart => true
end
package 'packagename' do
...
end
template 'configfile1'
notifies :restart, 'service[myservice]'
end
...
template 'configfileN'
notifies :restart, 'service[myservice]'
end
execute "a command from package which generates and enables the init script" do
notifies :start, 'service[myservice]', :immediately
end
execute "a command that should run once every time, that requires service to be running"
をこれを行うことにより、我々は、すべてのサービスを実行中に第2の実行のために実行されている、サービスの初期起動が設定ファイルを持っていることを確認します設定ファイルが変更された場合は、サービスを再起動して変更を取得します。
しかし、サービスの初期状態が停止した場所(最初の実行時や何らかの不具合が発生した場合など)に設定ファイルが変更された場合(特に最初の実行時に可能ですが他の実行)、最初の実行ブロックにより、正しい構成ファイルがすでに存在する状態でサービスが開始され、実行の最後にサービスが不必要に再起動します。
通知のターゲットアクションを変更しても動作していないようです(即時通知がただちに発生するため、遅延通知が引き続き発生するため)それ以外は正しいとは言えません。
また、すでに実行している場合は実行しないので、2番目の実行をサービス開始にサブスクライブできません。
これは非常に厄介ですが、最初の実行でサービスを再開するのを最小限に抑えるためのパターンがありますか?または特定のアクションが取られたときに遅延通知を取り消すための仕組みですか?
これは、悲しいことに、シェフは賢明ではないようですが、それはまだ二重のスタートをしています。論理構造に関しては、私が考えていた方法は、同じリソースに対して通知を宣言する前に(サービス)リソースを宣言していたことです。しかし、正しさの好みよりももっと文体的な好みが多いです:) – Charlie