Upstart: запуск службы после незапускаемого процесса

11

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

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

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

Falken
источник

Ответы:

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) Создайте задание upstart («официант»), которое «запускается при остановленном rc» (т. Е. Запускается, когда все задания SysV заявлены как выполненные), а затем опрашивает, ожидая готовности mysql, затем завершает работу. Ваша работа "начать на остановившегося официанта".

4) Преобразование mysql в задание Upstart (лучший вариант). Здесь есть отправная точка для выскочки конфигурации mysql: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu

jamesodhunt
источник
1
Посмотрев вокруг, этот ответ суммирует все варианты, которые у меня есть. Также спасибо, что указали на разрыв между «запущенным mysql» и временем, когда mysql фактически доступен. Давайте посмотрим, если № 4 уже где-то пробовали.
Falken
Вариант 3 требует «запуск на запущенном официанте». Не на остановке.
adeandrade
Вариант 1 хорошо подходит для нашей модели! Мы сначала загрузить все скрипты выскочки с сервера конфигурации через питон скрипт , который работает os.system('/sbin/initctl emit consul-finished'), а затем запустить другие службы поstart on consul-finished
CMag
Спасибо за это, мой друг! По сути, я вынужден был заменить initctl emit cloud-init-finishedSysv-сервис, чтобы иметь возможность подключиться
Хосе Албан
0

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

start on started rc

/etc/init/rc.conf это то, что запускает не upstart задания изнутри upstart.

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

Дэйв Грегори
источник
-1

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

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

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

кажи
источник
... что не будет волшебно начать выскочку работы , когда MySQL запускается.
Адаптер
да, это не то, что вы спросили !!! ты просил другой путь. По крайней мере, так я понял
Кадзи
Моя выскочка должна следить за MySQL и отправлять уведомления, если она не работает. Я чувствую себя немного неловко, запуская mysql через работу по мониторингу
Falken
Я не думаю, что это совершенно не так. Я делаю что-то вроде этого: предварительный запуск сценария, если! /etc/init.d/rabbitmq-server status &> / dev / null; затем /etc/init.d/rabbitmq-server запустить сценарий завершения fi
maxadamo