目前我和這事的結構是這樣的屬性配方:儘量減少廚師通知的服務重啓?
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"
這樣,既保證了服務的初始啓動有配置文件,在每次運行該服務正在運行第二個執行塊,如果有任何配置文件發生變化,我們重新啓動服務來獲取更改。然而,如果廚師運行發生在服務的初始狀態停止的地方(例如在第一次運行或者發生了不良事件時),並且配置文件已經改變(特別是在第一次運行時,但可能爲其他運行),則第一個執行塊將導致服務以正確的配置文件啓動,然後在運行結束時,服務將不必要地重新啓動。 (當然假設初始啓動後的資源不會導致服務重啓)
更改通知的目標操作似乎不起作用(因爲即時通知仍會立即發生,則延遲通知仍會發生) ,而且不會是正確的。
此外,我們不能訂閱第二個執行到服務啓動,因爲如果它已經運行,我們會結束不執行它。
這是非常挑剔的,但有沒有更好的模式,可以遵循最小化初始運行的服務重啓?或者在採取特定行動時取消延遲通知的機制?
給那一槍,可悲的廚師顯然不是那麼聰明,它仍然在做一個雙重的開始。就邏輯結構而言,我在考慮的方式是在聲明針對相同資源的通知之前聲明(服務)資源。這絕對是更多的文體偏好,而不是正確性的偏好,雖然:) – Charlie