Я знаходжусь у ситуації, коли шеф-кухар може почати послугу (postgres), але згодом це може бути припинено поза межами діапазону. Я хочу, щоб наступний запуск шеф-кухаря спричинив запуск служби. Я спробував це:
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
робить його запущеним. Однак вони виглядають як анти-шаблони через портативність (і, можливо, зупиняють її, перш ніж запускати її знову в останньому випадку).
Отже, як я можу сказати шефу примусово розпочати службу, навіть якщо він вважає, що вона вже працює?
Для цього використовується шеф-кухар 11.6, розміщений OpsCode, і рецепт postgresql за замовчуванням. (Зауважте, це схоже, але я думаю, не зовсім те саме, як змусити діяти на "сучасних" ресурсах у шеф-кухаря? )
--- EDIT (уточнення після повідомлення про jtimberland) ---
В -l debug
тут показано:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Навіть коли це НЕ працює. Так це звучить як одна помилка, і мені це цікаво. Однак мене в першу чергу цікавить, чи є спосіб сказати шеф-кухарю "завжди викликати команду запуску служби, пропускаючи перевірку стану". Ось тут питання.
(Я не експерт, але я вважаю, що найбільш портативний спосіб забезпечити роботу служби - це запустити службу, і це майже завжди безвідмовно. OTOH перевіряє, чи працює ця служба, є менш послідовною, і я не розумію, чому нам слід дбати !)
:start
незалежно від:status
. Також я сподіваюся, що це робитьps -ef | grep [p]ostgresql
чи подібне, інакше він зазвичай відповідає власній команді grep і, таким чином, завжди вважає, що служба працює. (А може, це основна проблема?)