Jestem w sytuacji, w której szef kuchni może uruchomić usługę (postgres), ale później może zostać zatrzymany poza pasmem. Chcę, aby kolejne uruchomienie szefa kuchni spowodowało uruchomienie usługi. Próbowałem tego:
service "postgresql" do
action :start
end
Ale to nie ma żadnego efektu, mówiąc (up to date)
przypuszczalnie dlatego, że szef kuchni wie, że został rozpoczęty i nie jest w stanie powiedzieć, że przestał. (Być może z powodu tego, jak service ... status
zachowuje się ta usługa?) Jeśli to napiszę:
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
Dostaję pożądane zachowanie. Również action :restart
sprawia, że działa. Jednak wydają się być anty-wzorami ze względu na przenośność (i potencjalnie zatrzymanie go przed ponownym uruchomieniem w tym ostatnim przypadku).
Jak mogę więc powiedzieć Szefowi Kuchni, aby siłą uruchomił usługę, nawet jeśli sądzi, że już działa?
Korzysta z Chef 11.6, hostowanego przez OpsCode i domyślnej receptury postgresql. (Uwaga: jest to podobne, ale nie do końca takie samo, jak wymuszanie akcji na „aktualnych” zasobach szefa kuchni? )
--- EDYCJA (wyjaśnienie po post Jtimberland) ---
W -l debug
tym miejscu pokazuje:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Nawet gdy NIE jest uruchomiony. To brzmi jak jeden błąd i jestem tym zainteresowany. Jednak przede wszystkim interesuje mnie to, czy istnieje sposób, aby powiedzieć szefowi kuchni „zawsze wywołuj polecenie uruchomienia usługi, pomijając sprawdzanie statusu”. Oto pytanie tutaj.
(Nie jestem ekspertem, ale myślę, że najbardziej przenośnym sposobem na zapewnienie działania usługi jest uruchomienie usługi i prawie zawsze jest to idempotentne. OTOH sprawdzanie, czy usługa jest uruchomiona, jest mniej spójne i nie rozumiem, dlaczego powinniśmy się tym przejmować !)
źródło
:start
bez względu na:status
. Mam również nadzieję, że zrobi cośps -ef | grep [p]ostgresql
podobnego, w przeciwnym razie zwykle będzie pasować do własnego polecenia grep, a zatem zawsze będzie myśleć, że usługa jest uruchomiona. (A może to jest podstawowy problem?)service start
jest prawie zawsze idempotentny, więc powinno być dobrze.