В 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
внутри вашей выскочки!