Як забезпечити роботу служби за допомогою шеф-кухаря?


10

Я знаходжусь у ситуації, коли шеф-кухар може почати послугу (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 перевіряє, чи працює ця служба, є менш послідовною, і я не розумію, чому нам слід дбати !)

Відповіді:


11

За замовчуванням шеф-кухар перевірить, чи працює служба, і запустить її, якщо служба не працює.

Як він визначає, що служба працює, залежить.

За замовчуванням шеф-кухар намагатиметься відповідати назві послуги ( postgresqlтут) у таблиці процесів за допомогою ps.

ps -ef | grep postgresql

По суті. Ім'я служби буде використано для відповідності шаблону при огляді таблиці процесів. Це може бути або не бути тим, що ви хочете / потребуєте, особливо залежно від платформи та того, як вона називає послугу "postgresql".

Однак ви можете сказати шефу, що сервіс підтримує команду "статус", а це означає, що шеф, як правило, робить щось подібне,

/etc/init.d/postgresql status

І використовуйте код повернення, щоб визначити, працює він чи ні (не нульовий не працює).

Шеф-кухар цього не робить за замовчуванням, оскільки не всі сервісні скрипти підтримують команду статусу (розчаровує), а шеф-кухар не знає, що правильно робити. Він намагається зробити розумну справу за замовчуванням, але іноді наївно. Таким чином, ви можете сказати шеф-кухарю, що ресурс має команду статусу і не бути таким наївним.

service "postgresql" do
  supports :status => true
  action :start
end

Тепер, якщо сервіс насправді не названий "postgresql", а натомість "postgresql-92" або подібним, ви можете це зробити так:

service "postgresql-92" do
  supports :status => true
  action :start
end

або

service "postgresql" do
  service_name "postgresql-92"
  supports :status => true
  action :start
end

Ви можете дізнатись, що відбувається більш детально, запустивши шеф-кухаря з виходом налагодження:

chef-client -l debug

Це корисно, але не зовсім відповідає на питання. Я хочу сказати це :start незалежно від :status. Також я сподіваюся, що це робить ps -ef | grep [p]ostgresqlчи подібне, інакше він зазвичай відповідає власній команді grep і, таким чином, завжди вважає, що служба працює. (А може, це основна проблема?)
Мінлива хмарність

Мені здається, що в Chef або є помилка, або щось не в системі. На якій платформі / platform_version ви працюєте? Як ви встановили postgresql? Пакет, джерело?
jtimberman

Щоб не помітити, шеф вживає самовпевнених заходів щодо управління ресурсами, визначеними декларативно. Спосіб забезпечення роботи сервісу з шеф-кухарем - це надіслати початкову дію до служби. Якщо цього не відбувається, це помилка в шеф-кухаря, помилка в рецепті або помилка в системі.
jtimberman

Дякую @jtimberman Я відкрив помилку щодо повернення неправильного статусу на Tickets.opscode.com/browse/COOK-334 . Однак моє запитання тут полягає в тому, чи є спосіб змусити шеф-кухаря видати команду запуску послуги, пропускаючи перевірку стану. service startмайже завжди безсилий, тому це повинно бути добре.
Мінлива хмарність

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.