Я нахожусь в ситуации, когда Chef может запустить службу (postgres), но впоследствии она может быть остановлена вне группы. Я хочу, чтобы при последующем запуске Chef служба работала. Я пробовал это:
service "postgresql" do
action :start
end
Но это не имеет никакого эффекта, говоря, по- (up to date)
видимому, потому что Шеф знает, что он был запущен, и не может сказать, что он остановился. (Возможно, из-за того, как service ... status
ведет себя этот сервис?) Если я напишу это:
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
Я получаю желаемое поведение. Кроме того, action :restart
делает это работает. Однако они кажутся анти-паттернами из-за переносимости (и, возможно, остановки перед последующим запуском в последнем случае).
Итак, как я могу сказать Chef принудительно запустить службу, даже если он думает, что она уже запущена?
Это использует Chef 11.6, размещенный в OpsCode, и рецепт postgresql по умолчанию. (Обратите внимание, что это похоже, но я думаю, что это не то же самое, что « Как заставить действия на« современных »ресурсах в Chef?» .)
--- РЕДАКТИРОВАТЬ (уточнение после публикации в jtimberland) ---
В -l debug
здесь показано:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Даже когда он НЕ работает. Это звучит как одна ошибка, и я заинтересован в этом. Однако меня в первую очередь интересует, есть ли способ сказать Chef «всегда вызывать команду запуска службы, пропуская проверку статуса». Это вопрос здесь.
(Я не эксперт, но я думаю, что самый портативный способ убедиться, что служба запущена, - это запустить службу, и это почти всегда идемпотент. OTOH проверка, работает ли служба, менее последовательна, и я не понимаю, почему мы должны заботиться !)
источник
:start
независимо от:status
. Также я надеюсь, что он делаетps -ef | grep [p]ostgresql
или похожий, иначе он обычно будет соответствовать своей собственной команде grep и, таким образом, всегда будет думать, что служба работает. (Или, может быть, в этом основная проблема?)service start
почти всегда идемпотент, так что это должно быть хорошо.