Derzeit mein Rezept mit Attributen, die so strukturiert ist Materie:Minimieren Sie den Dienst von den Benachrichtigungen des Kochs neu?
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"
Auf diese Weise stellen wir sicher, dass die anfängliche Start des Dienstes die Konfigurationsdateien hat, während jeder den Dienst laufen für die zweite läuft ausführen blockieren, und wenn eine Konfigurationsdatei geändert wird, starten wir den Dienst neu, um die Änderungen zu übernehmen.
Wenn jedoch ein Chef ausgeführt wird, wo der anfängliche Status des Dienstes angehalten wird (wie beim ersten Ausführen oder wenn etwas Schlimmes passiert ist) und Konfigurationsdateien geändert haben (insbesondere beim ersten Durchlauf, aber möglich für andere Runs), bewirkt der erste Ausführungsblock, dass der Dienst mit den korrekten Konfigurationsdateien beginnt, die bereits vorhanden sind. Am Ende des Laufs wird der Dienst dann unnötigerweise neu gestartet. (Angenommen natürlich, dass Ressourcen nach dem ersten Start keinen Neustart des Dienstes verursachen)
Die Zielaktion von Benachrichtigungen zu ändern scheint nicht zu funktionieren (da sofortige Benachrichtigungen immer noch sofort passieren, dann treten verzögerte Benachrichtigungen immer noch auf) und außerdem wäre das nicht korrekt.
Auch können wir nicht die zweite Ausführung an den Service-Start abonnieren, denn wenn es bereits läuft, würden wir es nicht ausführen.
Es ist sehr pingelig, aber gibt es ein besseres Muster, das verfolgt werden könnte, um Neustarts eines Dienstes für den ersten Lauf zu minimieren? Oder ein Mechanismus, um verzögerte Benachrichtigungen zu stornieren, wenn eine bestimmte Aktion ausgeführt wird?
Geben Sie einen Schuss, leider ist Chef nicht so schlau, es macht immer noch einen Doppelstart. Was die logische Struktur anbetrifft, war die Art und Weise, wie ich darüber nachdachte, dass ich die (Service-) Ressource deklarierte, bevor ich Benachrichtigungen für dieselbe Ressource deklarierte. Es ist definitiv mehr eine stilistische Vorliebe als eine Korrektheitspräferenz obwohl :) – Charlie