Ich bin in einer Situation, in der der Küchenchef möglicherweise einen Gottesdienst startet (Postgres), der jedoch später außerhalb der Band gestoppt wird. Ich möchte, dass ein nachfolgender Chef-Lauf bewirkt, dass der Dienst ausgeführt wird. Ich habe das versucht:
service "postgresql" do
action :start
end
Aber es hat keine Wirkung, (up to date)
vermutlich weil der Chef weiß, dass es gestartet wurde und nicht sagen kann, dass es aufgehört hat. (Möglicherweise aufgrund des Verhaltens service ... status
dieses Dienstes?) Wenn ich Folgendes schreibe:
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
Ich bekomme das gewünschte Verhalten. Auch ein action :restart
macht es zum Laufen. Diese scheinen jedoch aufgrund der Portabilität wie Anti-Patterns zu sein (und möglicherweise zu stoppen, bevor sie im letzteren Fall erneut gestartet werden).
Wie kann ich dem Küchenchef sagen, dass er den Dienst zwangsweise starten soll, auch wenn er denkt, dass er bereits ausgeführt wird?
Dies verwendet Chef 11.6, das von OpsCode gehostet wird, und das Standardrezept für Postgresql. (Beachten Sie, dass dies ähnlich ist, aber ich denke nicht ganz dasselbe wie Wie man Aktionen auf "aktuelle" Ressourcen in Chef erzwingt? )
--- EDIT (Klarstellung nach jtimberland post) ---
Das -l debug
hier zeigt:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Auch wenn es NICHT läuft. Das klingt also nach einem Fehler, und das interessiert mich. Ich bin jedoch in erster Linie daran interessiert, ob es eine Möglichkeit gibt, Chefkoch mitzuteilen, dass "immer der Dienststartbefehl aufgerufen und die Statusprüfung übersprungen wird". Das ist hier die Frage.
(Ich bin kein Experte, aber ich denke, der portabelste Weg, um sicherzustellen, dass ein Dienst ausgeführt wird, besteht darin, den Dienst zu starten. Das ist fast immer idempotent. OTOH prüft, ob ein Dienst ausgeführt wird, ist weniger konsistent und ich verstehe nicht, warum wir uns darum kümmern sollten !)
quelle
:start
unabhängig von der sagen:status
. Ich hoffe auch, dass es einps -ef | grep [p]ostgresql
oder ähnliches macht, sonst passt es normalerweise zu seinem eigenen grep-Befehl und denkt daher immer, dass der Dienst ausgeführt wird. (Oder vielleicht ist das das zugrunde liegende Problem?)service start
ist fast immer idempotent, also sollte dies in Ordnung sein.