2013-05-20 3 views
7

Mit Chef, wie kann ich einen Dienst starten, wenn es nicht läuft oder neu starten, wenn es ist?Chef - starten oder starten Sie den Dienst nach Bedarf neu

Ich benutze Ubuntu 12.04 und der Dienst, mit dem ich mich momentan befasse, ist PostgreSQL. Stoppen und Starten funktioniert fast, aber Chef scheint zu versuchen, es zu starten, bevor es vollständig gestoppt wurde und fehlschlägt.

+0

Normalerweise startet die "Neustart" -Funktion von Startskripten, wenn "Neustart" als Aktion verwendet wird, zuerst den Dienst und startet ihn dann. Wenn es nicht läuft, startet es es einfach. So würde ich vorschlagen, dass Sie Ihr Startskript auschecken und die "Neustart" -Aktion in Chef ... verwenden –

+1

Leider verursacht Neustart einen Fehler. Es ist nicht glücklich, dass der Dienst nicht ausgeführt wird. – Jake

+0

Nun, eine Sache, die Sie tun können, ist das Startskript zu reparieren, wie Sie wollen, und verwenden Sie die Cookbook_file (oder Vorlage) -Ressource von Chef zuerst das ursprüngliche Startskript mit Ihrem Startskript zu ersetzen und dann die Ressource, die postgresql oder OR neu startet Da die Ressource nicht neu gestartet werden kann, fügen Sie einen Wiederholungsversuch hinzu (http://docs.opscode.com/chef/resources.html). –

Antwort

3

In der Regel verwenden Sie action :start bei der Installation eines Dienstes, um sicherzustellen, dass es nach dem Chef ausgeführt wird, siehe Service resource.

Wenn Sie eine Datei ändern, die den Neustart des Dienstes erfordert, damit die Änderungen aktiv sind, verwenden Sie die Aktionen :reload oder :restart (abhängig davon, was das init-Skript anbietet). Es sieht dann wie folgt aus:

template "/etc/postgresql/pg.conf" do 
    source "pg.conf.erb" 
    notifies :restart, "service[postgres]" 
end 

Mehr über Notifications.

+0

Um klarer zu werden habe ich ein Rezept, das die postgres recovery.conf schreibt. Dieses Rezept wird ausgeführt, wenn ein Slave-Server erstellt wird, und auch wenn sich irgendetwas mit dem Master ändert, so dass recovery.conf aktualisiert werden kann, um eine neue Master-IP-Adresse usw. wiederzugeben. Im ersten Fall dürfen die Postgres niemals gestartet worden sein Benutze keinen Neustart. – Jake

+0

Vielleicht sollte ich zwei sehr ähnliche Rezepte haben - (Update Conf und Service starten) und (Update Conf und Service neu starten). Nicht sehr trocken, aber würde funktionieren. – Jake

0

Hier ist eine Übersicht über den Code, den ich verwendet habe, um eine von mehreren (Neu-) Start-Aktionen für einen Andock-Container bedingt auszuführen. Es könnte für die Service (Neu-) Start-Situation in einem Fall angepasst werden, in dem der Neustart-Hinweis von @ giannis-nohj aus irgendeinem Grund nicht funktioniert.