В Ubuntu 10.04 мне нужно запустить службу с помощью upstart, но только когда mysql запущен и работает.
Проблема в том, что сам mysql не обрабатывается upstart, поэтому я не могу использовать функцию «start on».
Что я могу сделать ?
У вас есть несколько вариантов:
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
os.system('/sbin/initctl emit consul-finished')
, а затем запустить другие службы поstart on consul-finished
initctl emit cloud-init-finished
Sysv-сервис, чтобы иметь возможность подключитьсяЯ предлагаю начать свою работу с выскочкой после того, как все работы без выскочки будут завершены:
/etc/init/rc.conf
это то, что запускает не upstart задания изнутри upstart.Реквизит: /server//a/533481
источник
Как насчет использования
внутри вашей выскочки работы!
источник