Upstart: запуск служби після нестандартного процесу


11

У Ubuntu 10.04 мені потрібно починати свою службу з запуску, але лише тоді, коли mysql запущений і працює.

Проблема полягає в тому, що сам mysql не обробляється запуском, тому я не можу використовувати функцію "запустити".

Що я можу зробити ?

Відповіді:


15

У вас є кілька варіантів:

1) змусити mysql повідомити Upstart про те, що він розпочався, випускаючи подію

initctl emit mysql-started"або подібне.

Це можна вирішити, додавши initctlвиклик до /etc/init.d/mysql.

2) Вимкніть mysql із звичайних рівнів SysV та створіть обгорткове завдання Upstart, яке запускається (не це не обробляє зупинку - лише приклад):

cat >>/etc/init/mysql-sysv.conf<<EOT
  # wait for SysV job to finish
  start on stopped rc
  exec /etc/init.d/mysql start
EOT

Тоді знайдіть свою роботу " start on started mysql-sysv".

Проблема тут полягає в тому, що у вас виникнуть проблеми, якщо хтось (або якийсь системний інструмент автоматично) повторно додасть /etc/rc?.dпосилання на оригінальний /etc/init.d/mysqlсценарій обслуговування. Крім того, ви можете виявити, що mysql насправді не готовий до деякого часу після того, як почався його основний pid. Бази даних є проблематичними, оскільки вони можуть зайняти деякий час, щоб “зайти в Інтернет” навіть після їх запуску (повтор журналу транзакцій тощо).

3) Створіть початкову роботу ("офіціант"), яка виконує "запуск на зупиненому rc" (тобто запуск, коли всі завдання SysV заявили, що завершено), а потім опитування, які очікують, що програма mysql стане готова, а потім закривається. Нехай ваша робота "почнеться на зупиненого офіціанта".

4) Перетворити mysql в завдання Upstart (найкращий варіант). Тут є відправна точка для початкової конфігурації mysql тут: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu


1
Озирнувшись, ця відповідь підсумовує всі мої варіанти. Також дякую, що вказали на розрив між "запущеним mysql" та часом, коли mysql фактично доступний. Давайте подивимось, чи №4 вже десь пробували.
Фолкен

Варіант 3 вимагає "запустити розпочатого офіціанта". Не на зупинці.
adeandrade

варіант 1 добре відповідає нашій моделі! Спочатку завантажуємо всі початкові сценарії з конфігураційного сервера через скрипт python, який запускається os.system('/sbin/initctl emit consul-finished'), а потім запускаємо інші сервісиstart on consul-finished
CMag

Дякую за це, мій друже! По суті, мені довелося замінити initctl emit cloud-init-finishedсервіс sysv, щоб мати можливість підключитися
Хосе Альбан

0

Я пропоную розпочати свою роботу на початковому етапі після того, як всі незавершені завдання будуть закінчені:

start on started rc

/etc/init/rc.conf це те, що запускає нестандартні завдання зсередини.

Реквізит: /server//a/533481


-1

Як щодо використання

pre-start exec /etc/init.d/mysql start

всередині вашої початкової роботи!


... що не чарівно почати вискочку роботи , коли MySQL запускається.
адаптор

так, це не те, про що ви питали !!! ви попросили іншого зворотного шляху. Принаймні так я зрозумів
Каджі

Моя початкова робота повинна контролювати mysql та надсилати сповіщення, якщо його немає. Я відчуваю себе трохи незручно запускати mysql через роботу з моніторингу
Фолкен

Я не думаю, що це абсолютно неправильно. Я роблю щось подібне: сценарій перед запуском, якщо! /etc/init.d/rabbitmq-server status &> / dev / null; потім /etc/init.d/rabbitmq-server start fi end script
maxadamo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.