Назад | Перейти на главную страницу

Upstart: запуск службы после не-выскочки

В Ubuntu 10.04 мне нужно запустить службу с помощью выскочки, но только когда mysql запущен и работает.

Проблема в том, что сам mysql не обрабатывается выскочкой, поэтому я не могу использовать функцию «запускать».

Что я могу сделать ?

У вас есть несколько вариантов:

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

Я предлагаю начать свою выскочку после все завершены не-выскочки:

start on started rc

/etc/init/rc.conf это то, что начинает работу без выскочки изнутри выскочки.

Реквизит: https://serverfault.com/a/533481

Как насчет использования

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

внутри вашей выскочки!